32template <
class ObjectType>
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);
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
150JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE (
"-Wdeprecated-declarations")
151JUCE_BEGIN_IGNORE_WARNINGS_MSVC (4996)
153template <typename ObjectType1, typename ObjectType2>
154bool operator== (ObjectType1* pointer1, const ScopedPointer<ObjectType2>& pointer2) noexcept
156 return pointer1 == pointer2.get();
159template <
typename ObjectType1,
typename ObjectType2>
160bool operator!= (ObjectType1* pointer1,
const ScopedPointer<ObjectType2>& pointer2)
noexcept
162 return pointer1 != pointer2.get();
165template <
typename ObjectType1,
typename ObjectType2>
166bool operator== (
const ScopedPointer<ObjectType1>& pointer1, ObjectType2* pointer2)
noexcept
168 return pointer1.get() == pointer2;
171template <
typename ObjectType1,
typename ObjectType2>
172bool operator!= (
const ScopedPointer<ObjectType1>& pointer1, ObjectType2* pointer2)
noexcept
174 return pointer1.get() != pointer2;
177template <
typename ObjectType1,
typename ObjectType2>
178bool operator== (
const ScopedPointer<ObjectType1>& pointer1,
const ScopedPointer<ObjectType2>& pointer2)
noexcept
180 return pointer1.get() == pointer2.get();
183template <
typename ObjectType1,
typename ObjectType2>
184bool operator!= (
const ScopedPointer<ObjectType1>& pointer1,
const ScopedPointer<ObjectType2>& pointer2)
noexcept
186 return pointer1.get() != pointer2.get();
189template <
class ObjectType>
190bool operator== (
decltype (
nullptr),
const ScopedPointer<ObjectType>& pointer)
noexcept
192 return pointer.get() ==
nullptr;
195template <
class ObjectType>
196bool operator!= (
decltype (
nullptr),
const ScopedPointer<ObjectType>& pointer)
noexcept
198 return pointer.get() !=
nullptr;
201template <
class ObjectType>
202bool operator== (
const ScopedPointer<ObjectType>& pointer,
decltype (
nullptr)) noexcept
204 return pointer.get() ==
nullptr;
207template <
class ObjectType>
208bool operator!= (
const ScopedPointer<ObjectType>& pointer,
decltype (
nullptr)) noexcept
210 return pointer.get() !=
nullptr;
215template <
typename Type>
216void deleteAndZero (ScopedPointer<Type>&) {
static_assert (
sizeof (Type) == 12345,
217 "Attempt to call deleteAndZero() on a ScopedPointer"); }
219JUCE_END_IGNORE_WARNINGS_GCC_LIKE
220JUCE_END_IGNORE_WARNINGS_MSVC
auto & get(ProcessorChain< Processors... > &chain) noexcept
Non-member equivalent of ProcessorChain::get which avoids awkward member template syntax.
Type * createCopyIfNotNull(const Type *objectToCopy)
If a pointer is non-null, this returns a new copy of the object that it points to,...
const DirectoryEntry & operator*(const DirectoryEntry &e) noexcept
A convenience operator so that the expression *it++ works correctly when it is an instance of RangedD...
void deleteAndZero(Type &pointer)
Delete an object pointer, and sets the pointer to null.