26#ifndef RESOURCEHOLDER_H
27#define RESOURCEHOLDER_H
31template<
typename T>
requires requires(T* copyable) { copyable->unique_copy(); }
33 std::unique_ptr<T>
object =
nullptr;
39 : object(old.object ? old.object->unique_copy() : nullptr) {}
48 : object(std::move(old)) {}
51 object = std::make_unique<U>(std::forward<U>(other));
56 if(old)
object = old->unique_copy();
62 explicit operator bool()
const {
return object !=
nullptr; }
64 bool operator==(std::nullptr_t null)
const {
return object == null; }
Definition ResourceHolder.h:32
ResourceHolder & operator=(const std::shared_ptr< T > &old)
Definition ResourceHolder.h:55
T * operator->() const
Definition ResourceHolder.h:60
ResourceHolder & operator=(U &&other)
Definition ResourceHolder.h:50
~ResourceHolder()=default
ResourceHolder & operator=(ResourceHolder &&)=delete
bool operator==(std::nullptr_t null) const
Definition ResourceHolder.h:64
ResourceHolder(ResourceHolder &&old) noexcept
Definition ResourceHolder.h:41
ResourceHolder(std::unique_ptr< T > &&old)
Definition ResourceHolder.h:47
ResourceHolder(const ResourceHolder &old)
Definition ResourceHolder.h:38
ResourceHolder & operator=(const ResourceHolder &)=delete