Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
Gray::cIUnkPtr< TYPE > Class Template Reference

#include <cIUnkPtr.h>

Inheritance diagram for Gray::cIUnkPtr< TYPE >:
Gray::cPtrFacade< IUnknown >

Public Member Functions

 cIUnkPtr ()
 Construct and destruction. More...
 
 cIUnkPtr (const TYPE *p2)
 
 cIUnkPtr (const THIS_t &ref)
 
 cIUnkPtr (THIS_t &&ref)
 
 ~cIUnkPtr ()
 
int get_RefCount () const
 
TYPE ** get_PPtr ()
 
void ** get_PPtrV ()
 
TYPEGetInterfacePtr () const
 
void put_Ptr (TYPE *p2)
 
HRESULT SetQI (IUnknown *p2, const IID &riid)
 
int ReleasePtr ()
 
THIS_toperator= (const TYPE *p2)
 Assignment ops. More...
 
THIS_toperator= (const THIS_t &p2)
 
TYPEoperator* () const
 Accessor ops. More...
 
TYPEoperator-> () const
 
- Public Member Functions inherited from Gray::cPtrFacade< IUnknown >
 cPtrFacade (IUnknown *p=nullptr) noexcept
 
 cPtrFacade (THIS_t &&ref) noexcept
 
bool isValidPtr () const noexcept
 
IUnknown ** get_PPtr ()
 
IUnknownget_Ptr () const noexcept
 
void put_Ptr (IUnknown *p) noexcept
 
void ReleasePtr () noexcept
 
void AttachPtr (IUnknown *p) noexcept
 
IUnknownDetachPtr () noexcept
 
THIS_toperator= (IUnknown *p) noexcept
 
THIS_toperator= (THIS_t &&ref) noexcept
 
 operator IUnknown * () const noexcept
 
IUnknownget_Ref () const
 
IUnknownoperator* () const
 
IUnknownoperator-> () const
 
bool operator! () const noexcept
 Comparison ops. More...
 
bool operator!= (IUnknown *p2) const noexcept
 
bool operator== (IUnknown *p2) const noexcept
 

Protected Member Functions

void SetFirstIUnk (TYPE *p2)
 

Additional Inherited Members

- Protected Attributes inherited from Gray::cPtrFacade< IUnknown >
IUnknownm_p
 Pointer to some object of TYPE. More...
 

Detailed Description

template<class TYPE = IUnknown>
class Gray::cIUnkPtr< TYPE >

Smart pointer to an IUnknown based object. like _WIN32 ATL cComPtr<> or "com_ptr_t" TYPE must be based on IUnknown

Constructor & Destructor Documentation

◆ cIUnkPtr() [1/4]

template<class TYPE = IUnknown>
Gray::cIUnkPtr< TYPE >::cIUnkPtr ( )
inline

Construct and destruction.

◆ cIUnkPtr() [2/4]

template<class TYPE = IUnknown>
Gray::cIUnkPtr< TYPE >::cIUnkPtr ( const TYPE p2)
inline

◆ cIUnkPtr() [3/4]

template<class TYPE = IUnknown>
Gray::cIUnkPtr< TYPE >::cIUnkPtr ( const THIS_t ref)
inline

using the assignment auto constructor is not working so use this.

◆ cIUnkPtr() [4/4]

template<class TYPE = IUnknown>
Gray::cIUnkPtr< TYPE >::cIUnkPtr ( THIS_t &&  ref)
inline

move constructor. would ': cPtrFacade<TYPE>(ref)' deal with cPtrTrace correctly?

◆ ~cIUnkPtr()

template<class TYPE = IUnknown>
Gray::cIUnkPtr< TYPE >::~cIUnkPtr ( )
inline

Member Function Documentation

◆ get_PPtr()

template<class TYPE = IUnknown>
TYPE** Gray::cIUnkPtr< TYPE >::get_PPtr ( )
inline

use IUNK_GETPPTR() macro to track this with USE_IUNK_TRACE. QueryInterface() or similar wants a pointer to a pointer to fill in my interface.

◆ get_PPtrV()

template<class TYPE = IUnknown>
void** Gray::cIUnkPtr< TYPE >::get_PPtrV ( )
inline

get a ** to assign the pointer. assume the caller has added the first reference for me. Don't call AddRef! use IUNK_GETPPTRV() macro to track this with USE_IUNK_TRACE. QueryInterface() and others don't like the typing.

◆ get_RefCount()

template<class TYPE = IUnknown>
int Gray::cIUnkPtr< TYPE >::get_RefCount ( ) const
inline
Returns
the current reference count. Add and remove a ref to get the count.

◆ GetInterfacePtr()

template<class TYPE = IUnknown>
TYPE* Gray::cIUnkPtr< TYPE >::GetInterfacePtr ( ) const
inline

like _com_ptr_t

◆ operator*()

template<class TYPE = IUnknown>
TYPE& Gray::cIUnkPtr< TYPE >::operator* ( ) const
inline

Accessor ops.

◆ operator->()

template<class TYPE = IUnknown>
TYPE* Gray::cIUnkPtr< TYPE >::operator-> ( ) const
inline

◆ operator=() [1/2]

template<class TYPE = IUnknown>
THIS_t& Gray::cIUnkPtr< TYPE >::operator= ( const THIS_t p2)
inline
Note
we need a ref assignment because we need to prevent new objects from being destroyed before assigned.

◆ operator=() [2/2]

template<class TYPE = IUnknown>
THIS_t& Gray::cIUnkPtr< TYPE >::operator= ( const TYPE p2)
inline

Assignment ops.

◆ put_Ptr()

template<class TYPE = IUnknown>
void Gray::cIUnkPtr< TYPE >::put_Ptr ( TYPE p2)
inline

◆ ReleasePtr()

template<class TYPE = IUnknown>
int Gray::cIUnkPtr< TYPE >::ReleasePtr ( )
inline

Compliment SetFirstIUnk()

Returns
the new reference count

◆ SetFirstIUnk()

template<class TYPE = IUnknown>
void Gray::cIUnkPtr< TYPE >::SetFirstIUnk ( TYPE p2)
inlineprotected

Initialize the pointer value and add a single reference. Compliment ReleasePtr()

Note
IncRefCount can throw !

◆ SetQI()

template<class TYPE = IUnknown>
HRESULT Gray::cIUnkPtr< TYPE >::SetQI ( IUnknown p2,
const IID riid 
)
inline

Do proper COM style dynamic_cast for Interface using QueryInterface().


The documentation for this class was generated from the following file: