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