36template <
class ObjectType>
52 : object (objectToHold), shouldDelete (takeOwnership)
65 : object (objectToTransferFrom.
release()),
66 shouldDelete (objectToTransferFrom.shouldDelete)
80 if (
object != objectToTransferFrom.object)
83 object.reset (objectToTransferFrom.object.release());
86 shouldDelete = objectToTransferFrom.shouldDelete;
101 inline operator ObjectType*()
const noexcept {
return object.get(); }
104 inline ObjectType*
get() const noexcept {
return object.get(); }
107 inline ObjectType&
operator*() const noexcept {
return *object; }
110 inline ObjectType*
operator->() const noexcept {
return object.get(); }
116 ObjectType*
release() noexcept {
return object.release(); }
139 void set (ObjectType* newObject,
bool takeOwnership)
141 if (
object.
get() != newObject)
144 object.reset (newObject);
147 shouldDelete = takeOwnership;
153 set (newObject,
true);
159 set (newObject,
false);
173 object.swapWith (other.object);
174 std::swap (shouldDelete, other.shouldDelete);
179 std::unique_ptr<ObjectType> object;
180 bool shouldDelete =
false;
OptionalScopedPointer(ObjectType *objectToHold, bool takeOwnership)
void setNonOwned(ObjectType *newObject)
void set(ObjectType *newObject, bool takeOwnership)
OptionalScopedPointer()=default
ObjectType * get() const noexcept
ObjectType & operator*() const noexcept
OptionalScopedPointer & operator=(OptionalScopedPointer &objectToTransferFrom)
ObjectType * release() noexcept
void setOwned(ObjectType *newObject)
OptionalScopedPointer(OptionalScopedPointer &objectToTransferFrom)
void swapWith(OptionalScopedPointer< ObjectType > &other) noexcept
bool willDeleteObject() const noexcept
ObjectType * operator->() const noexcept