CloudBuilder C++ SDK  v3.0.0
Making social games is easy !
Public Member Functions | List of all members
CotCHelpers::autoref< T > Struct Template Reference

#include <CotCHelpers.h>

Public Member Functions

 autoref (T *ref, bool takeOwnership=false)
 
 autoref (const autoref &ref)
 
template<class U >
 autoref (const autoref< U > &ref)
 
template<class U >
autoref< T > & operator= (const autoref< U > &ref)
 
autorefoperator= (const autoref &ref)
 
autorefoperator<<= (T *eptr)
 
T * operator -> () const
 
T & operator * () const
 
 operator T * () const
 
bool operator== (const autoref &ref) const
 
T * get () const
 

Detailed Description

template<class T>
struct CotCHelpers::autoref< T >

   This smart pointer can optionally be used to automate the Retain/Release work on CRefClass objects.
   Calling Autorelease(obj) will create an autoref<Type> which will hold the object and call Release on it when it goes out of scope.
   Building an autoref<Type>(obj) will Retain the object upon creation and Release it when it goes out of scope.
   - If you are going to be the owner of the object (case of a return value or new Object) and want to release it when it goes out of scope, use Autorelease(obj).
   - If you are not the owner of the object and just want to keep a reference (case of a parameter) use autoref<Type>(obj).
   Example:
    C *c = new C();
    autoref<C> cRef = Autorelease(c);       // Will call Release once when cRef goes out of scope, freeing the object

But, if you pass as a parameter, you will probably want this instead void func(C *param) { If you had done Autorelease(c), the object would be Released at the end of this function, destroying it... (and you are not the owner) autoref<C> myRef = autoref<C>(param); } The example above becomes as follows (basically call Autorelease with any 'new' object and that's it): class C: public CRefClass { autoref member; // Released automatically in destructor

C(autoref<A> a) { member = a; } autoref getMember() { return member; } void setMember(autoref<A> newMember) { member = newMember; } autoref makeA() { return Autorelease(new A); } };

autoref<C> c = Autorelease(new C); // Released at the end of the scope autoref a1 = c.getMember(); autoref a2 = c.makeA(); Note: the <<= operator can be used to start tacking a reference to a new object. These 2 lines are equivalent: myRef = Autorelease(new Object); myRef <<= new Object;


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