32 template <
class ObjectType>
41 JUCE_DEPRECATED_ATTRIBUTE
inline ScopedPointer (decltype (
nullptr)) noexcept {}
44 JUCE_DEPRECATED_ATTRIBUTE
inline ScopedPointer (ObjectType* objectToTakePossessionOf) noexcept
45 : object (objectToTakePossessionOf)
51 : object (objectToTransferFrom.release())
56 JUCE_DEPRECATED_ATTRIBUTE
inline ~
ScopedPointer() { reset(); }
60 if (
this != objectToTransferFrom.getAddress())
64 jassert (
object ==
nullptr ||
object != objectToTransferFrom.object);
65 reset (objectToTransferFrom.release());
71 ScopedPointer& operator= (ObjectType* newObjectToTakePossessionOf)
73 reset (newObjectToTakePossessionOf);
79 other.object =
nullptr;
84 reset (other.release());
89 inline operator ObjectType*()
const noexcept {
return object; }
90 inline ObjectType*
get()
const noexcept {
return object; }
91 inline ObjectType& operator*()
const noexcept {
return *object; }
92 inline ObjectType* operator->()
const noexcept {
return object; }
96 auto* oldObject = object;
101 void reset (ObjectType* newObject)
103 if (
object != newObject)
105 auto* oldObject = object;
113 jassert (newObject ==
nullptr);
119 reset (newObject.release());
122 ObjectType* release() noexcept {
auto* o = object;
object = {};
return o; }
129 jassert (
object != other.object ||
this == other.getAddress() ||
object ==
nullptr);
131 std::swap (
object, other.object);
134 inline ObjectType* createCopy()
const {
return createCopyIfNotNull (
object); }
138 ObjectType*
object =
nullptr;
140 const ScopedPointer* getAddress()
const noexcept {
return this; }
142 #if ! JUCE_MSVC // (MSVC can't deal with multiple copy constructors) 149 template <
typename ObjectType1,
typename ObjectType2>
152 return pointer1 == pointer2.get();
155 template <
typename ObjectType1,
typename ObjectType2>
158 return pointer1 != pointer2.get();
161 template <
typename ObjectType1,
typename ObjectType2>
164 return pointer1.get() == pointer2;
167 template <
typename ObjectType1,
typename ObjectType2>
170 return pointer1.get() != pointer2;
173 template <
typename ObjectType1,
typename ObjectType2>
176 return pointer1.get() == pointer2.get();
179 template <
typename ObjectType1,
typename ObjectType2>
182 return pointer1.get() != pointer2.get();
185 template <
class ObjectType>
188 return pointer.get() ==
nullptr;
191 template <
class ObjectType>
194 return pointer.get() !=
nullptr;
197 template <
class ObjectType>
200 return pointer.get() ==
nullptr;
203 template <
class ObjectType>
206 return pointer.get() !=
nullptr;
211 template <
typename Type>
213 "Attempt to call deleteAndZero() on a ScopedPointer"); }