#include <cxx_ptr.h>
upf::Ptr<T>
holds pointer of type T*
and overrides operator->
so that it can be used as if it were T*
. upf::Ptr's function is two-fold:
T*
pointer pointing to object's valid interface or NULL
if the object does not implement interface T
.T | interface type. This must be interface, not implementation class type! |
{ upf::Ptr<IFoo> foo = upf::create("MyFooImpl"); upf::Ptr<upf::IClassInfo> x = foo; // x == NULL now because IFoo does not implement upf::IClassInfo { upf::Ptr<upf::IObject> base = foo; // foo's ref count increased by 1 (to 2) // 'base' contains valid pointer, every interface implements IObject } // 'base' ptr destroyed, ref cnt decreased to 1 } // 'foo' ptr destroyed, ref cnt decreased to 0, the object itself is deleted
Public Methods | |
Ptr () | |
Default ctor. | |
Ptr (const Ptr &ptr) | |
Copy ctor. | |
template<class O> | Ptr (const Ptr< O > &ptr) |
"Copy" ctor from non-T smart pointer. | |
Ptr (IObject *obj) | |
Ctor from non-T ordinary pointer. | |
Ptr (T *obj) | |
Ctor (doesn't call upf::queryInterface). | |
~Ptr () | |
Destructor. | |
T * | operator-> () const |
operator-> allows us to use Ptr as ordinary pointers | |
const Ptr & | operator= (IObject *obj) |
operator = for non-T types. | |
const Ptr & | operator= (const Ptr &ptr) |
Fast version of operator= that does not call upf::queryInterface. | |
template<class O> const Ptr & | operator= (const Ptr< O > &ptr) |
operator = for non-T types. | |
const Ptr & | operator= (T *obj) |
Fast version of operator= that does not call upf::queryInterface. | |
operator T * () const | |
Cast to T* . |
|
"Copy" ctor from non-
upf::queryInterface is called to determine if interface |
|
Ctor from non-
upf::queryInterface is called to determine if interface |
|
upf::queryInterface is called to determine if interface |
|
upf::queryInterface is called to determine if interface |