#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 |
1.2.18