33class [[deprecated]] ScopedPointer
37 JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE (
"-Wdeprecated-declarations")
38 JUCE_BEGIN_IGNORE_WARNINGS_MSVC (4996)
40 inline ScopedPointer() {}
42 inline ScopedPointer (
decltype (
nullptr))
noexcept {}
44 inline ScopedPointer (ObjectType* objectToTakePossessionOf) noexcept
45 : object (objectToTakePossessionOf)
49 ScopedPointer (ScopedPointer& objectToTransferFrom) noexcept
50 : object (objectToTransferFrom.release())
54 inline ~ScopedPointer() { reset(); }
56 ScopedPointer& operator= (ScopedPointer& objectToTransferFrom)
58 if (
this != objectToTransferFrom.getAddress())
62 jassert (
object ==
nullptr ||
object != objectToTransferFrom.object);
63 reset (objectToTransferFrom.release());
69 ScopedPointer& operator= (ObjectType* newObjectToTakePossessionOf)
71 reset (newObjectToTakePossessionOf);
75 ScopedPointer (ScopedPointer&& other) noexcept : object (other.object)
77 other.object =
nullptr;
80 ScopedPointer& operator= (ScopedPointer&& other)
noexcept
82 reset (other.release());
87 inline operator ObjectType*()
const noexcept {
return object; }
88 inline ObjectType* get()
const noexcept {
return object; }
89 inline ObjectType& operator*()
const noexcept {
return *object; }
90 inline ObjectType* operator->()
const noexcept {
return object; }
94 auto* oldObject = object;
96 ContainerDeletePolicy<ObjectType>::destroy (oldObject);
99 void reset (ObjectType* newObject)
101 if (
object != newObject)
103 auto* oldObject = object;
105 ContainerDeletePolicy<ObjectType>::destroy (oldObject);
111 jassert (newObject ==
nullptr);
115 void reset (ScopedPointer& newObject)
117 reset (newObject.release());
120 ObjectType* release()
noexcept {
auto* o = object;
object = {};
return o; }
123 void swapWith (ScopedPointer<ObjectType>& other)
noexcept
127 jassert (
object != other.object ||
this == other.getAddress() ||
object ==
nullptr);
129 std::swap (
object, other.object);
132 inline ObjectType* createCopy()
const {
return createCopyIfNotNull (
object); }
136 ObjectType*
object =
nullptr;
138 const ScopedPointer* getAddress()
const noexcept {
return this; }
141 ScopedPointer (
const ScopedPointer&) =
delete;
142 ScopedPointer& operator= (
const ScopedPointer&) =
delete;
145 JUCE_END_IGNORE_WARNINGS_MSVC
146 JUCE_END_IGNORE_WARNINGS_GCC_LIKE
160bool operator!= (ObjectType1* pointer1,
const ScopedPointer<ObjectType2>& pointer2)
noexcept