CrystalSpace

Public API Reference

Main Page   Modules   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Related Pages  

csRef< T > Class Template Reference

A smart pointer. More...

#include <ref.h>

List of all members.

Public Methods

 csRef ()
 Construct an invalid smart pointer (that is, one pointing at nothing).

 csRef (const csPtr< T > &newobj)
 Construct a smart pointer from a csPtr.

 csRef (T *newobj)
 Construct a smart pointer from a raw object reference.

template<class T2>  csRef (csRef< T2 > const &other)
 Smart pointer copy constructor from assignment-compatible csRef<T2>.

 csRef (csRef const &other)
 Smart pointer copy constructor.

 ~csRef ()
 Smart pointer destructor.

csRef & operator= (const csPtr< T > &newobj)
 Assign a csPtr to a smart pointer.

csRef & operator= (T *newobj)
 Assign a raw object reference to this smart pointer.

void AttachNew (csPtr< T > newObj)
 Assign an object reference created with the new operator to this smart pointer.

template<class T2> csRef & operator= (csRef< T2 > const &other)
 Assign another assignment-compatible csRef<T2> to this one.

csRef & operator= (csRef const &other)
 Assign another csRef<> of the same type to this one.

T * operator-> () const
 Dereference underlying object.

 operator T * () const
 Cast smart pointer to a pointer to the underlying object.

T & operator * () const
 Dereference underlying object.

bool IsValid () const
 Smart pointer validity check.


Friends

bool operator== (const csRef &r1, const csRef &r2)
 Test if the two references point to same object.

bool operator!= (const csRef &r1, const csRef &r2)
 Test if the two references point to different object.

bool operator== (const csRef &r1, T *obj)
 Test if object pointed to by reference is same as obj.

bool operator!= (const csRef &r1, T *obj)
 Test if object pointed to by reference is different from obj.

bool operator== (T *obj, const csRef &r1)
 Test if object pointed to by reference is same as obj.

bool operator!= (T *obj, const csRef &r1)
 Test if object pointed to by reference is different from obj.


Detailed Description

template<class T>
class csRef< T >

A smart pointer.

Maintains and correctly manages a reference to a reference-counted object. This template requires only that the object type T implement the methods IncRef() and DecRef(). No other requirements are placed upon T.

Definition at line 118 of file ref.h.


Constructor & Destructor Documentation

template<class T>
csRef< T >::csRef   [inline]
 

Construct an invalid smart pointer (that is, one pointing at nothing).

Dereferencing or attempting to use the invalid pointer will result in a run-time error, however it is safe to invoke IsValid().

Definition at line 129 of file ref.h.

template<class T>
csRef< T >::csRef const csPtr< T > &    newobj [inline]
 

Construct a smart pointer from a csPtr.

Doesn't call IncRef() on the object since it is assumed that the object in csPtr is already IncRef()'ed.

Definition at line 136 of file ref.h.

template<class T>
csRef< T >::csRef T *    newobj [inline]
 

Construct a smart pointer from a raw object reference.

Calls IncRef() on the object.

Definition at line 151 of file ref.h.

template<class T>
template<class T2>
csRef< T >::csRef csRef< T2 > const &    other [inline]
 

Smart pointer copy constructor from assignment-compatible csRef<T2>.

Definition at line 160 of file ref.h.

template<class T>
csRef< T >::csRef csRef< T > const &    other [inline]
 

Smart pointer copy constructor.

Definition at line 168 of file ref.h.

template<class T>
csRef< T >::~csRef   [inline]
 

Smart pointer destructor.

Invokes DecRef() upon the underlying object.

Definition at line 176 of file ref.h.


Member Function Documentation

template<class T>
void csRef< T >::AttachNew csPtr< T >    newObj [inline]
 

Assign an object reference created with the new operator to this smart pointer.

Remarks:
This function allows you to assign an object pointer created with the new operator to the csRef object. Proper usage would be:
 csRef<iEvent> event;
 event.AttachNew (new csEvent);
While not recommended, you can also use this function to assign a csPtr object or csRef object to the csRef. In both of these cases, using AttachNew is equivalent to performing a simple assignment using the = operator.
Note:
Calling this function is equivalent to casting an object to a csPtr<T> and then assigning the csPtr<T> to the csRef, as follows:
 // Same effect as above code.
 csRef<iEvent> event = csPtr<iEvent> (new csEvent);

Definition at line 255 of file ref.h.

template<class T>
bool csRef< T >::IsValid   const [inline]
 

Smart pointer validity check.

Returns true if smart pointer is pointing at an actual object, otherwise returns false.

Definition at line 327 of file ref.h.

template<class T>
T& csRef< T >::operator *   const [inline]
 

Dereference underlying object.

Definition at line 320 of file ref.h.

template<class T>
csRef< T >::operator T *   const [inline]
 

Cast smart pointer to a pointer to the underlying object.

Definition at line 316 of file ref.h.

template<class T>
T* csRef< T >::operator->   const [inline]
 

Dereference underlying object.

Definition at line 312 of file ref.h.

template<class T>
csRef& csRef< T >::operator= csRef< T > const &    other [inline]
 

Assign another csRef<> of the same type to this one.

Definition at line 274 of file ref.h.

template<class T>
template<class T2>
csRef& csRef< T >::operator= csRef< T2 > const &    other [inline]
 

Assign another assignment-compatible csRef<T2> to this one.

Definition at line 266 of file ref.h.

template<class T>
csRef& csRef< T >::operator= T *    newobj [inline]
 

Assign a raw object reference to this smart pointer.

Remarks:
This function calls the object's IncRef() method. Because of this you should not assign a reference created with the new operator to a csRef object driectly. The following code will produce a memory leak:
 csRef<iEvent> event = new csEvent;
If you are assigning a new object to a csRef, use AttachNew(T* newObj) instead.

Definition at line 217 of file ref.h.

template<class T>
csRef& csRef< T >::operator= const csPtr< T > &    newobj [inline]
 

Assign a csPtr to a smart pointer.

Doesn't call IncRef() on the object since it is assumed that the object in csPtr is already IncRef()'ed.

Remarks:
After this assignment, the csPtr<T> object is invalidated and cannot be used. You should not (and in fact cannot) decref the csPtr<T> after this assignment has been made.

Definition at line 190 of file ref.h.

Referenced by csRef< iGraphics2D >::operator=().


Friends And Related Function Documentation

template<class T>
bool operator!= T *    obj,
const csRef< T > &    r1
[friend]
 

Test if object pointed to by reference is different from obj.

Definition at line 306 of file ref.h.

template<class T>
bool operator!= const csRef< T > &    r1,
T *    obj
[friend]
 

Test if object pointed to by reference is different from obj.

Definition at line 296 of file ref.h.

template<class T>
bool operator!= const csRef< T > &    r1,
const csRef< T > &    r2
[friend]
 

Test if the two references point to different object.

Definition at line 286 of file ref.h.

template<class T>
bool operator== T *    obj,
const csRef< T > &    r1
[friend]
 

Test if object pointed to by reference is same as obj.

Definition at line 301 of file ref.h.

template<class T>
bool operator== const csRef< T > &    r1,
T *    obj
[friend]
 

Test if object pointed to by reference is same as obj.

Definition at line 291 of file ref.h.

template<class T>
bool operator== const csRef< T > &    r1,
const csRef< T > &    r2
[friend]
 

Test if the two references point to same object.

Definition at line 281 of file ref.h.


The documentation for this class was generated from the following file:
Generated for Crystal Space by doxygen 1.2.18