40 template <
class ObjectType>
56 : object (objectToHold), shouldDelete (takeOwnership)
69 : object (objectToTransferFrom.
release()),
70 shouldDelete (objectToTransferFrom.shouldDelete)
84 if (
object != objectToTransferFrom.object)
87 object.reset (objectToTransferFrom.object.release());
90 shouldDelete = objectToTransferFrom.shouldDelete;
105 inline operator ObjectType*()
const noexcept {
return object.get(); }
108 inline ObjectType*
get() const noexcept {
return object.get(); }
111 inline ObjectType&
operator*() const noexcept {
return *object; }
114 inline ObjectType*
operator->() const noexcept {
return object.get(); }
120 ObjectType*
release() noexcept {
return object.release(); }
143 void set (ObjectType* newObject,
bool takeOwnership)
145 if (
object.
get() != newObject)
148 object.reset (newObject);
151 shouldDelete = takeOwnership;
157 set (newObject,
true);
163 set (newObject,
false);
177 object.swapWith (other.object);
178 std::swap (shouldDelete, other.shouldDelete);
183 std::unique_ptr<ObjectType> object;
184 bool shouldDelete =
false;
Holds a pointer to an object which can optionally be deleted when this pointer goes out of scope.
void reset()
Resets this pointer to null, possibly deleting the object that it holds, if it has ownership of it.
OptionalScopedPointer(ObjectType *objectToHold, bool takeOwnership)
Creates an OptionalScopedPointer to point to a given object, and specifying whether the OptionalScope...
void setNonOwned(ObjectType *newObject)
Makes this OptionalScopedPointer point at a new object, but will not take ownership of that object.
void set(ObjectType *newObject, bool takeOwnership)
Makes this OptionalScopedPointer point at a new object, specifying whether the OptionalScopedPointer ...
void clear()
Does the same thing as reset().
OptionalScopedPointer()=default
Creates an empty OptionalScopedPointer.
ObjectType & operator*() const noexcept
Returns the object that this pointer is managing.
ObjectType * release() noexcept
Removes the current object from this OptionalScopedPointer without deleting it.
~OptionalScopedPointer()
The destructor may or may not delete the object that is being held, depending on the takeOwnership fl...
ObjectType * get() const noexcept
Returns the object that this pointer is managing.
void setOwned(ObjectType *newObject)
Makes this OptionalScopedPointer point at a new object, and take ownership of that object.
OptionalScopedPointer(OptionalScopedPointer &objectToTransferFrom)
Takes ownership of the object that another OptionalScopedPointer holds.
void swapWith(OptionalScopedPointer< ObjectType > &other) noexcept
Swaps this object with another OptionalScopedPointer.
ObjectType * operator->() const noexcept
Lets you access methods and properties of the object that this pointer is holding.
bool willDeleteObject() const noexcept
Returns true if the target object will be deleted when this pointer object is deleted.
OptionalScopedPointer & operator=(OptionalScopedPointer &objectToTransferFrom)
Takes ownership of the object that another OptionalScopedPointer holds.