32template <
class ObjectType>
41 JUCE_DEPRECATED_ATTRIBUTE
inline ScopedPointer (
decltype (
nullptr))
noexcept {}
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; }
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); }
140 const ScopedPointer* getAddress()
const noexcept {
return this; }
149template <
typename ObjectType1,
typename ObjectType2>
155template <
typename ObjectType1,
typename ObjectType2>
156bool operator!= (ObjectType1* pointer1,
const ScopedPointer<ObjectType2>& pointer2)
noexcept
158 return pointer1 != pointer2.get();
161template <
typename ObjectType1,
typename ObjectType2>
162bool operator== (
const ScopedPointer<ObjectType1>& pointer1, ObjectType2* pointer2)
noexcept
164 return pointer1.get() == pointer2;
167template <
typename ObjectType1,
typename ObjectType2>
168bool operator!= (
const ScopedPointer<ObjectType1>& pointer1, ObjectType2* pointer2)
noexcept
170 return pointer1.get() != pointer2;
173template <
typename ObjectType1,
typename ObjectType2>
174bool operator== (
const ScopedPointer<ObjectType1>& pointer1,
const ScopedPointer<ObjectType2>& pointer2)
noexcept
176 return pointer1.get() == pointer2.get();
179template <
typename ObjectType1,
typename ObjectType2>
180bool operator!= (
const ScopedPointer<ObjectType1>& pointer1,
const ScopedPointer<ObjectType2>& pointer2)
noexcept
182 return pointer1.get() != pointer2.get();
185template <
class ObjectType>
186bool operator== (
decltype (
nullptr),
const ScopedPointer<ObjectType>& pointer)
noexcept
188 return pointer.get() ==
nullptr;
191template <
class ObjectType>
192bool operator!= (
decltype (
nullptr),
const ScopedPointer<ObjectType>& pointer)
noexcept
194 return pointer.get() !=
nullptr;
197template <
class ObjectType>
198bool operator== (
const ScopedPointer<ObjectType>& pointer,
decltype (
nullptr)) noexcept
200 return pointer.get() ==
nullptr;
203template <
class ObjectType>
204bool operator!= (
const ScopedPointer<ObjectType>& pointer,
decltype (
nullptr)) noexcept
206 return pointer.get() !=
nullptr;
211template <
typename Type>
212void deleteAndZero (ScopedPointer<Type>&) {
static_assert (
sizeof (Type) == 12345,
213 "Attempt to call deleteAndZero() on a ScopedPointer"); }