20#if SMTG_CPP11_STDLIBSUPPORT
47 inline IPtr (I* ptr,
bool addRef =
true);
51 inline IPtr (
const IPtr<T>& other) : ptr (other.get ())
60 inline I* operator= (I* ptr);
62 inline IPtr& operator= (
const IPtr& other);
67 operator= (other.get ());
71 inline operator I* ()
const {
return ptr; }
72 inline I* operator-> ()
const {
return ptr; }
74 inline I* get ()
const {
return ptr; }
76#if SMTG_CPP11_STDLIBSUPPORT
77 inline IPtr (
IPtr<I>&& movePtr) SMTG_NOEXCEPT : ptr (movePtr.take ()) { }
80 inline IPtr (
IPtr<T>&& movePtr) SMTG_NOEXCEPT : ptr (movePtr.take ()) { }
82 inline IPtr& operator= (
IPtr<I>&& movePtr) SMTG_NOEXCEPT
87 ptr = movePtr.take ();
97 ptr = movePtr.take ();
102 inline void reset (I* obj =
nullptr)
109 I* take () SMTG_NOEXCEPT
116 template <
typename T>
117 static IPtr<T> adopt (T* obj) SMTG_NOEXCEPT {
return IPtr<T> (obj,
false); }
134inline IPtr<I>::IPtr (
const IPtr<I>& other) : ptr (other.ptr)
142inline IPtr<I>::IPtr () : ptr (0)
148inline IPtr<I>::~IPtr ()
159inline I* IPtr<I>::operator= (I* _ptr)
174inline IPtr<I>& IPtr<I>::operator= (
const IPtr<I>& _ptr)
176 operator= (_ptr.ptr);
217 inline I* operator= (I* _ptr)
219 if (_ptr != this->ptr)
222 this->ptr->release ();
258#if SMTG_CPP11_STDLIBSUPPORT
274 friend struct Detail::Adopt;
286 friend struct Detail::Adopt;
298 friend struct Detail::Adopt;
306 template <
typename T>
307 static IPtr<T> adopt (Shared<T>& ref)
313 template <
typename T>
314 static IPtr<T> adopt (Owned<T>& ref)
322 template <
typename T>
323 static T* adopt (Used<T>& ref)
328 template <
template <
typename>
class OwnerType,
typename T>
329 static OwnerType<T> toOwnerType (T* obj)
344IPtr<T> adopt (Shared<T>& ref) {
return Detail::Adopt::adopt (ref); }
347IPtr<T> adopt (Shared<T>&& ref) {
return Detail::Adopt::adopt (ref); }
354IPtr<T> adopt (Owned<T>& ref) {
return Detail::Adopt::adopt (ref); }
357IPtr<T> adopt (Owned<T>&& ref) {
return Detail::Adopt::adopt (ref); }
364T* adopt (Used<T>& ref) {
return Detail::Adopt::adopt (ref); }
367T* adopt (Used<T>&& ref) {
return Detail::Adopt::adopt (ref); }
371Owned<T> toOwned (T* obj) {
return Detail::Adopt::toOwnerType<Owned> (obj); }
375Shared<T> toShared (T* obj) {
return Detail::Adopt::toOwnerType<Shared> (obj); }
379Used<T> toUsed (T* obj) {
return Detail::Adopt::toOwnerType<Used> (obj); }
IPtr - Smart pointer template class.
OPtr - "owning" smart pointer used for newly created FObjects.
IPtr< I > shared(I *p)
Assigning shared object to an IPtr.
IPtr< I > owned(I *p)
Assigning newly created object to an IPtr.