TMCCountedGetHelper< T > Class Template Reference
[MCCore]

Inheritance diagram for TMCCountedGetHelper< T >:
TMCObject

List of all members.

Public Member Functions

 TMCCountedGetHelper (T **ptr)
 TMCCountedGetHelper (void **ptr)
 ~TMCCountedGetHelper ()
T *& operator= (T *ptr) const
T * operator-> () const
 operator T * () const
T & operator* () const

Protected Attributes

T ** fPtr

Detailed Description

template<class T>
class TMCCountedGetHelper< T >

Counted objects are objects that use a counter to keep track of how many other objects need them, and delete themselves when nobody needs them anymore. A counted object has an AddRef method that increments its counter, and a Release method that decrements it. When the value of the counter reaches zero, the object is deleted.

It is possible to call AddRef and Release "by hand" but it is a bad idea for at least two reasons. First, it is very easy to forget to add a call to Release, therefore causing a memory leak. Second the code becomes more complex because in every function that calls AddRef, you must consider exceptions. So you have to use a try/catch block, add a call to Release at the end of the try AND another one before re-throwing in the catch section...

Because they automatically call AddRef and Release, TMCCountedPtr, TMCCountedGetHelper and TMCCountedCreateHelper are your best friends.

TMCCountedGetHelper makes it easier to return a pointer to a counted object through a function's parameter. Here's a typical code sample:

 class TMCCountedGetHelperSample
 { 
        public:
                void GetMyFile(IMCFile** outFile)
                {
                        TMCCountedGetHelper<IMCFile> result(outFile);   //releases *outFile if its not null
                        result= fMyPreciousFile;                                                //puts fMyPreciousFile into *outFile and addrefs it (if its not null)
                }
 protected:
                TMCCountedPtr<IMCFile> fMyPreciousFile;
        }

For more information, please refer to the "Counted Pointers" chapter in the overview of the SDK.


Constructor & Destructor Documentation

template<class T>
TMCCountedGetHelper< T >::TMCCountedGetHelper ( T **  ptr  )  [inline]
template<class T>
TMCCountedGetHelper< T >::TMCCountedGetHelper ( void **  ptr  )  [inline]
template<class T>
TMCCountedGetHelper< T >::~TMCCountedGetHelper (  )  [inline]

Member Function Documentation

template<class T>
TMCCountedGetHelper< T >::operator T * (  )  const [inline]
template<class T>
T& TMCCountedGetHelper< T >::operator* (  )  const [inline]
template<class T>
T* TMCCountedGetHelper< T >::operator-> (  )  const [inline]
template<class T>
T*& TMCCountedGetHelper< T >::operator= ( T *  ptr  )  const [inline]

Member Data Documentation

template<class T>
T** TMCCountedGetHelper< T >::fPtr [protected]

The documentation for this class was generated from the following file:
Generated on Mon Apr 26 22:48:02 2010 for Carrara SDK Doc by  doxygen 1.6.3