# TMCCountedCreateHelper< T > Class Template Reference
[MCCore]

Inheritance diagram for TMCCountedCreateHelper< T >:

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:

- MCCountedPtrHelper.h