TMCCountedCreateHelper< T > Class Template Reference
[MCCore]

Inheritance diagram for TMCCountedCreateHelper< T >:
TMCObject

List of all members.

Public Member Functions

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

Protected Attributes

T ** fPtr

Detailed Description

template<class T>
class TMCCountedCreateHelper< 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.

TMCCountedCreateHelper makes it easier implement a function that creates a counted object and returns it through a parameter. Here's a typical code sample:

 class TCreateHelperSample : public TMCSMPCountedObject
 { 
        public:
                static void Create(TCreateHelperSample** outSample)
                {
                        TMCCountedCreateHelper<TCreateHelperSample> result(outSample);  //releases *outSample if its not null

                        //Puts the new sample into *outSample but does NOT addref it (the refcount is initialized to 1)
                        result= new TCreateHelperSample();      
                }
 protected:
                TCreateHelperSample() {}
                ~TCreateHelperSample() {}
        }
Note:
that in such a case, you must use a TMCCountedCreateHelper. If you were using a TMCCountedGetHelper, the object would never be deleted because of the extra addref.

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


Constructor & Destructor Documentation

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

Member Function Documentation

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

Member Data Documentation

template<class T>
T** TMCCountedCreateHelper< 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