<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>Crystal Space 1.2.1: csRef< T > Class Template Reference (Crystal Space 1.2.1 Public API Reference)</title> <link href="tabs.css" rel="stylesheet" type="text/css"> <link href="doxygen.css" rel="stylesheet" type="text/css"> </head><body> <table border="0" cellpadding="0" cellspacing="0" width="100%" class="head"> <tr height="59"> <td class="head" width="202" valign="bottom" style="padding-left:0;"><a href="http://www.crystalspace3d.org/"><img src="csblur.png" width="236" height="59" alt="CrystalSpace" border="0"></a></td> <td class="head"><h2>Public API Reference</h2></td> </tr> <tr height="11"> <td colspan="2" class="headshadow" valign="top" style="padding-left:0;"><img src="csblurb.png" width="236" height="11" alt="" border="0"></td> </tr> </table> <div class="content"> <!-- Generated by Doxygen 1.5.3 --> <div class="tabs"> <ul> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li class="current"><a href="classes.html"><span>Classes</span></a></li> <li><a href="files.html"><span>Files</span></a></li> <li><a href="pages.html"><span>Related Pages</span></a></li> </ul> </div> <div class="tabs"> <ul> <li><a href="classes.html"><span>Alphabetical List</span></a></li> <li><a href="annotated.html"><span>Class List</span></a></li> <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li> <li><a href="functions.html"><span>Class Members</span></a></li> </ul> </div> <h1>csRef< T > Class Template Reference</h1><!-- doxytag: class="csRef" -->A smart pointer. <a href="#_details">More...</a> <p> <code>#include <<a class="el" href="ref_8h-source.html">csutil/ref.h</a>></code> <p> <p> <a href="classcsRef-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0"> <tr><td></td></tr> <tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classcsRef.html#9e60343d6cf44b91d071a61cff000c79">AttachNew</a> (<a class="el" href="classcsPtr.html">csPtr</a>< T > newObj)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Assign an object reference created with the new operator to this smart pointer. <a href="#9e60343d6cf44b91d071a61cff000c79"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classcsRef.html#5b2b5624a615ef3057beb4246d56a4fe">csRef</a> (<a class="el" href="classcsRef.html">csRef</a> const &other)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Smart pointer copy constructor. <a href="#5b2b5624a615ef3057beb4246d56a4fe"></a><br></td></tr> <tr><td class="memTemplParams" nowrap colspan="2">template<class T2> </td></tr> <tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classcsRef.html#fa4260c58edc68cb179707d598872e5f">csRef</a> (<a class="el" href="classcsRef.html">csRef</a>< T2 > const &other)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Smart pointer copy constructor from assignment-compatible csRef<T2>. <a href="#fa4260c58edc68cb179707d598872e5f"></a><br></td></tr> <tr><td class="memTemplParams" nowrap colspan="2">template<class T2> </td></tr> <tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classcsRef.html#3630d650f85228ea819f515d56c65d47">csRef</a> (T2 *newobj)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Construct a smart pointer from a raw object reference with a compatible type. <a href="#3630d650f85228ea819f515d56c65d47"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classcsRef.html#5e4615484affec6f6851156297e50a04">csRef</a> (T *newobj)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Construct a smart pointer from a raw object reference. <a href="#5e4615484affec6f6851156297e50a04"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classcsRef.html#f2644ede8e1cd525215e1581248dbeed">csRef</a> (const <a class="el" href="classcsPtr.html">csPtr</a>< T > &newobj)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Construct a smart pointer from a <a class="el" href="classcsPtr.html" title="A pointer encapsulator.">csPtr</a>. <a href="#f2644ede8e1cd525215e1581248dbeed"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classcsRef.html#27690290149b073a49ff073b5731820a">csRef</a> ()</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Construct an invalid smart pointer (that is, one pointing at nothing). <a href="#27690290149b073a49ff073b5731820a"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__util.html#g91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classcsRef.html#073a3611f0aa8078e80aea74128e5bc8">GetHash</a> () const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Return a hash value for this smart pointer. <a href="#073a3611f0aa8078e80aea74128e5bc8"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classcsRef.html#d09064b1a57b00e467a9400f3968b0b1">Invalidate</a> ()</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Invalidate the smart pointer by setting it to null. <a href="#d09064b1a57b00e467a9400f3968b0b1"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classcsRef.html#620198af96e2f744bab6207d9c546ed8">IsValid</a> () const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Smart pointer validity check. <a href="#620198af96e2f744bab6207d9c546ed8"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">T & </td><td class="memItemRight" valign="bottom"><a class="el" href="classcsRef.html#3762b3a13eaed1a4451e3c077c2bf4df">operator *</a> () const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Dereference underlying object. <a href="#3762b3a13eaed1a4451e3c077c2bf4df"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classcsRef.html#4c295696fe44e4a8d3ebd4c496e53918">operator T *</a> () const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Cast smart pointer to a pointer to the underlying object. <a href="#4c295696fe44e4a8d3ebd4c496e53918"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">T * </td><td class="memItemRight" valign="bottom"><a class="el" href="classcsRef.html#3c998d0bbee906f7a9c73bf64145f3c5">operator-></a> () const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Dereference underlying object. <a href="#3c998d0bbee906f7a9c73bf64145f3c5"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classcsRef.html">csRef</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classcsRef.html#4f7be769d0536f6cf0e2058cff6b60dd">operator=</a> (<a class="el" href="classcsRef.html">csRef</a> const &other)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Assign another csRef<> of the same type to this one. <a href="#4f7be769d0536f6cf0e2058cff6b60dd"></a><br></td></tr> <tr><td class="memTemplParams" nowrap colspan="2">template<class T2> </td></tr> <tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="classcsRef.html">csRef</a> & </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classcsRef.html#92165a22a0e93aaf93a92a83698b96aa">operator=</a> (<a class="el" href="classcsRef.html">csRef</a>< T2 > const &other)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Assign another assignment-compatible csRef<T2> to this one. <a href="#92165a22a0e93aaf93a92a83698b96aa"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classcsRef.html">csRef</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classcsRef.html#d815a0a58a68346ed410ee98c01acd62">operator=</a> (T *newobj)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Assign a raw object reference to this smart pointer. <a href="#d815a0a58a68346ed410ee98c01acd62"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classcsRef.html">csRef</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classcsRef.html#c3904da8a2c8113cbd89f049c7052a06">operator=</a> (const <a class="el" href="classcsPtr.html">csPtr</a>< T > &newobj)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Assign a <a class="el" href="classcsPtr.html" title="A pointer encapsulator.">csPtr</a> to a smart pointer. <a href="#c3904da8a2c8113cbd89f049c7052a06"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classcsRef.html#7ca758086a6a16d31219ef31c87a28a4">~csRef</a> ()</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Smart pointer destructor. <a href="#7ca758086a6a16d31219ef31c87a28a4"></a><br></td></tr> <tr><td colspan="2"><br><h2>Friends</h2></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classcsRef.html#d6e6480db3c13349078aa4fa9ff3b0ba">operator!=</a> (T *obj, const <a class="el" href="classcsRef.html">csRef</a> &r1)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Test if object pointed to by reference is different from obj. <a href="#d6e6480db3c13349078aa4fa9ff3b0ba"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classcsRef.html#4a03d6661e4a719fc551fbd372d7d7ac">operator!=</a> (const <a class="el" href="classcsRef.html">csRef</a> &r1, T *obj)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Test if object pointed to by reference is different from obj. <a href="#4a03d6661e4a719fc551fbd372d7d7ac"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classcsRef.html#890a8b4f61f83243a20ac95a7386745f">operator!=</a> (const <a class="el" href="classcsRef.html">csRef</a> &r1, const <a class="el" href="classcsRef.html">csRef</a> &r2)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Test if the two references point to different object. <a href="#890a8b4f61f83243a20ac95a7386745f"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classcsRef.html#53d2457de239a1a9b0b6761ff462087e">operator<</a> (const <a class="el" href="classcsRef.html">csRef</a> &r1, const <a class="el" href="classcsRef.html">csRef</a> &r2)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Test the relationship of the addresses of two objects. <a href="#53d2457de239a1a9b0b6761ff462087e"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classcsRef.html#6b81931630878c9b00f1c13067adeb4c">operator==</a> (T *obj, const <a class="el" href="classcsRef.html">csRef</a> &r1)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Test if object pointed to by reference is same as obj. <a href="#6b81931630878c9b00f1c13067adeb4c"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classcsRef.html#b6d5932063bae61e7293783c9ebd256f">operator==</a> (const <a class="el" href="classcsRef.html">csRef</a> &r1, T *obj)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Test if object pointed to by reference is same as obj. <a href="#b6d5932063bae61e7293783c9ebd256f"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classcsRef.html#051f0dced968aaf8d7af4c59d16b934f">operator==</a> (const <a class="el" href="classcsRef.html">csRef</a> &r1, const <a class="el" href="classcsRef.html">csRef</a> &r2)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Test if the two references point to same object. <a href="#051f0dced968aaf8d7af4c59d16b934f"></a><br></td></tr> </table> <hr><a name="_details"></a><h2>Detailed Description</h2> <h3>template<class T><br> class csRef< T ></h3> A smart pointer. <p> 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.<p> <dl class="remark" compact><dt><b>Remarks:</b></dt><dd>An extended explanation on smart pointers - how they work and what type to use in what scenario - is contained in the User's manual, section "Correctly Using Smart Pointers". </dd></dl> <p>Definition at line <a class="el" href="ref_8h-source.html#l00133">133</a> of file <a class="el" href="ref_8h-source.html">ref.h</a>.</p> <hr><h2>Constructor & Destructor Documentation</h2> <a class="anchor" name="27690290149b073a49ff073b5731820a"></a><!-- doxytag: member="csRef::csRef" ref="27690290149b073a49ff073b5731820a" args="()" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T> </div> <table class="memname"> <tr> <td class="memname"><a class="el" href="classcsRef.html">csRef</a>< T >::<a class="el" href="classcsRef.html">csRef</a> </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td width="100%"><code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Construct an invalid smart pointer (that is, one pointing at nothing). <p> Dereferencing or attempting to use the invalid pointer will result in a run-time error, however it is safe to invoke <a class="el" href="classcsRef.html#620198af96e2f744bab6207d9c546ed8" title="Smart pointer validity check.">IsValid()</a>. <p>Definition at line <a class="el" href="ref_8h-source.html#l00144">144</a> of file <a class="el" href="ref_8h-source.html">ref.h</a>.</p> </div> </div><p> <a class="anchor" name="f2644ede8e1cd525215e1581248dbeed"></a><!-- doxytag: member="csRef::csRef" ref="f2644ede8e1cd525215e1581248dbeed" args="(const csPtr< T > &newobj)" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T> </div> <table class="memname"> <tr> <td class="memname"><a class="el" href="classcsRef.html">csRef</a>< T >::<a class="el" href="classcsRef.html">csRef</a> </td> <td>(</td> <td class="paramtype">const <a class="el" href="classcsPtr.html">csPtr</a>< T > & </td> <td class="paramname"> <em>newobj</em> </td> <td> ) </td> <td width="100%"><code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Construct a smart pointer from a <a class="el" href="classcsPtr.html" title="A pointer encapsulator.">csPtr</a>. <p> Doesn't call IncRef() on the object since it is assumed that the object in <a class="el" href="classcsPtr.html" title="A pointer encapsulator.">csPtr</a> is already IncRef()'ed. <p>Definition at line <a class="el" href="ref_8h-source.html#l00151">151</a> of file <a class="el" href="ref_8h-source.html">ref.h</a>.</p> </div> </div><p> <a class="anchor" name="5e4615484affec6f6851156297e50a04"></a><!-- doxytag: member="csRef::csRef" ref="5e4615484affec6f6851156297e50a04" args="(T *newobj)" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T> </div> <table class="memname"> <tr> <td class="memname"><a class="el" href="classcsRef.html">csRef</a>< T >::<a class="el" href="classcsRef.html">csRef</a> </td> <td>(</td> <td class="paramtype">T * </td> <td class="paramname"> <em>newobj</em> </td> <td> ) </td> <td width="100%"><code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Construct a smart pointer from a raw object reference. <p> Calls IncRef() on the object. <p>Definition at line <a class="el" href="ref_8h-source.html#l00167">167</a> of file <a class="el" href="ref_8h-source.html">ref.h</a>.</p> </div> </div><p> <a class="anchor" name="3630d650f85228ea819f515d56c65d47"></a><!-- doxytag: member="csRef::csRef" ref="3630d650f85228ea819f515d56c65d47" args="(T2 *newobj)" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T> </div> <div class="memtemplate"> template<class T2> </div> <table class="memname"> <tr> <td class="memname"><a class="el" href="classcsRef.html">csRef</a>< T >::<a class="el" href="classcsRef.html">csRef</a> </td> <td>(</td> <td class="paramtype">T2 * </td> <td class="paramname"> <em>newobj</em> </td> <td> ) </td> <td width="100%"><code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Construct a smart pointer from a raw object reference with a compatible type. <p> Calls IncRef() on the object. <p>Definition at line <a class="el" href="ref_8h-source.html#l00177">177</a> of file <a class="el" href="ref_8h-source.html">ref.h</a>.</p> </div> </div><p> <a class="anchor" name="fa4260c58edc68cb179707d598872e5f"></a><!-- doxytag: member="csRef::csRef" ref="fa4260c58edc68cb179707d598872e5f" args="(csRef< T2 > const &other)" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T> </div> <div class="memtemplate"> template<class T2> </div> <table class="memname"> <tr> <td class="memname"><a class="el" href="classcsRef.html">csRef</a>< T >::<a class="el" href="classcsRef.html">csRef</a> </td> <td>(</td> <td class="paramtype"><a class="el" href="classcsRef.html">csRef</a>< T2 > const & </td> <td class="paramname"> <em>other</em> </td> <td> ) </td> <td width="100%"><code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Smart pointer copy constructor from assignment-compatible csRef<T2>. <p> <p>Definition at line <a class="el" href="ref_8h-source.html#l00186">186</a> of file <a class="el" href="ref_8h-source.html">ref.h</a>.</p> </div> </div><p> <a class="anchor" name="5b2b5624a615ef3057beb4246d56a4fe"></a><!-- doxytag: member="csRef::csRef" ref="5b2b5624a615ef3057beb4246d56a4fe" args="(csRef const &other)" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T> </div> <table class="memname"> <tr> <td class="memname"><a class="el" href="classcsRef.html">csRef</a>< T >::<a class="el" href="classcsRef.html">csRef</a> </td> <td>(</td> <td class="paramtype"><a class="el" href="classcsRef.html">csRef</a>< T > const & </td> <td class="paramname"> <em>other</em> </td> <td> ) </td> <td width="100%"><code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Smart pointer copy constructor. <p> <p>Definition at line <a class="el" href="ref_8h-source.html#l00194">194</a> of file <a class="el" href="ref_8h-source.html">ref.h</a>.</p> </div> </div><p> <a class="anchor" name="7ca758086a6a16d31219ef31c87a28a4"></a><!-- doxytag: member="csRef::~csRef" ref="7ca758086a6a16d31219ef31c87a28a4" args="()" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T> </div> <table class="memname"> <tr> <td class="memname"><a class="el" href="classcsRef.html">csRef</a>< T >::~<a class="el" href="classcsRef.html">csRef</a> </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td width="100%"><code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Smart pointer destructor. <p> Invokes DecRef() upon the underlying object. <p>Definition at line <a class="el" href="ref_8h-source.html#l00202">202</a> of file <a class="el" href="ref_8h-source.html">ref.h</a>.</p> </div> </div><p> <hr><h2>Member Function Documentation</h2> <a class="anchor" name="9e60343d6cf44b91d071a61cff000c79"></a><!-- doxytag: member="csRef::AttachNew" ref="9e60343d6cf44b91d071a61cff000c79" args="(csPtr< T > newObj)" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T> </div> <table class="memname"> <tr> <td class="memname">void <a class="el" href="classcsRef.html">csRef</a>< T >::AttachNew </td> <td>(</td> <td class="paramtype"><a class="el" href="classcsPtr.html">csPtr</a>< T > </td> <td class="paramname"> <em>newObj</em> </td> <td> ) </td> <td width="100%"><code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Assign an object reference created with the new operator to this smart pointer. <p> <dl class="remark" compact><dt><b>Remarks:</b></dt><dd>This function allows you to assign an object pointer created with the <code>new</code> operator to the <a class="el" href="classcsRef.html" title="A smart pointer.">csRef</a> object. Proper usage would be: <div class="fragment"><pre class="fragment"> <a class="code" href="classcsRef.html" title="A smart pointer.">csRef<iEvent></a> event; <span class="keyword">event</span>.AttachNew (<span class="keyword">new</span> <a class="code" href="classcsEvent.html" title="This class represents a system event.">csEvent</a>); </pre></div> While not recommended, you can also use this function to assign a <a class="el" href="classcsPtr.html" title="A pointer encapsulator.">csPtr</a> object or <a class="el" href="classcsRef.html" title="A smart pointer.">csRef</a> object to the <a class="el" href="classcsRef.html" title="A smart pointer.">csRef</a>. In both of these cases, using AttachNew is equivalent to performing a simple assignment using the <code>=</code> operator. </dd></dl> <dl class="note" compact><dt><b>Note:</b></dt><dd>Calling this function is equivalent to casting an object to a csPtr<T> and then assigning the csPtr<T> to the <a class="el" href="classcsRef.html" title="A smart pointer.">csRef</a>, as follows: <div class="fragment"><pre class="fragment"> <span class="comment">// Same effect as above code.</span> <a class="code" href="classcsRef.html" title="A smart pointer.">csRef<iEvent></a> <span class="keyword">event</span> = <a class="code" href="classcsPtr.html" title="A pointer encapsulator.">csPtr<iEvent></a> (<span class="keyword">new</span> csEvent); </pre></div> </dd></dl> <p>Definition at line <a class="el" href="ref_8h-source.html#l00282">282</a> of file <a class="el" href="ref_8h-source.html">ref.h</a>.</p> <p>Referenced by <a class="el" href="imageautoconvert_8h-source.html#l00051">CS::ImageAutoConvert::ImageAutoConvert()</a>.</p> </div> </div><p> <a class="anchor" name="073a3611f0aa8078e80aea74128e5bc8"></a><!-- doxytag: member="csRef::GetHash" ref="073a3611f0aa8078e80aea74128e5bc8" args="() const " --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T> </div> <table class="memname"> <tr> <td class="memname"><a class="el" href="group__util.html#g91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> <a class="el" href="classcsRef.html">csRef</a>< T >::GetHash </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td width="100%"> const<code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Return a hash value for this smart pointer. <p> <p>Definition at line <a class="el" href="ref_8h-source.html#l00372">372</a> of file <a class="el" href="ref_8h-source.html">ref.h</a>.</p> </div> </div><p> <a class="anchor" name="d09064b1a57b00e467a9400f3968b0b1"></a><!-- doxytag: member="csRef::Invalidate" ref="d09064b1a57b00e467a9400f3968b0b1" args="()" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T> </div> <table class="memname"> <tr> <td class="memname">void <a class="el" href="classcsRef.html">csRef</a>< T >::Invalidate </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td width="100%"><code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Invalidate the smart pointer by setting it to null. <p> <p>Definition at line <a class="el" href="ref_8h-source.html#l00368">368</a> of file <a class="el" href="ref_8h-source.html">ref.h</a>.</p> </div> </div><p> <a class="anchor" name="620198af96e2f744bab6207d9c546ed8"></a><!-- doxytag: member="csRef::IsValid" ref="620198af96e2f744bab6207d9c546ed8" args="() const " --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T> </div> <table class="memname"> <tr> <td class="memname">bool <a class="el" href="classcsRef.html">csRef</a>< T >::IsValid </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td width="100%"> const<code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Smart pointer validity check. <p> Returns true if smart pointer is pointing at an actual object, otherwise returns false. <p>Definition at line <a class="el" href="ref_8h-source.html#l00364">364</a> of file <a class="el" href="ref_8h-source.html">ref.h</a>.</p> <p>Referenced by <a class="el" href="draw__text_8h-source.html#l00045">csG2DDrawText< Tpixel, Tpixmixer1, Tpixmixer2, Tpixmixer3 >::DrawText()</a>, <a class="el" href="documenthelper_8h-source.html#l00073">CS::DocSystem::Implementation::FilterDocumentNodeIterator< T >::GetNextPosition()</a>, <a class="el" href="shaderprogram_8h-source.html#l00208">csShaderProgram::GetParamFloatVal()</a>, <a class="el" href="shaderprogram_8h-source.html#l00191">csShaderProgram::GetParamTransformVal()</a>, <a class="el" href="shaderprogram_8h-source.html#l00174">csShaderProgram::GetParamVectorVal()</a>, and <a class="el" href="documenthelper_8h-source.html#l00060">CS::DocSystem::Implementation::FilterDocumentNodeIterator< T >::HasNext()</a>.</p> </div> </div><p> <a class="anchor" name="3762b3a13eaed1a4451e3c077c2bf4df"></a><!-- doxytag: member="csRef::operator *" ref="3762b3a13eaed1a4451e3c077c2bf4df" args="() const " --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T> </div> <table class="memname"> <tr> <td class="memname">T& <a class="el" href="classcsRef.html">csRef</a>< T >::operator * </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td width="100%"> const<code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Dereference underlying object. <p> <p>Definition at line <a class="el" href="ref_8h-source.html#l00357">357</a> of file <a class="el" href="ref_8h-source.html">ref.h</a>.</p> </div> </div><p> <a class="anchor" name="4c295696fe44e4a8d3ebd4c496e53918"></a><!-- doxytag: member="csRef::operator T *" ref="4c295696fe44e4a8d3ebd4c496e53918" args="() const " --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T> </div> <table class="memname"> <tr> <td class="memname"><a class="el" href="classcsRef.html">csRef</a>< T >::operator T * </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td width="100%"> const<code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Cast smart pointer to a pointer to the underlying object. <p> <p>Definition at line <a class="el" href="ref_8h-source.html#l00353">353</a> of file <a class="el" href="ref_8h-source.html">ref.h</a>.</p> </div> </div><p> <a class="anchor" name="3c998d0bbee906f7a9c73bf64145f3c5"></a><!-- doxytag: member="csRef::operator->" ref="3c998d0bbee906f7a9c73bf64145f3c5" args="() const " --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T> </div> <table class="memname"> <tr> <td class="memname">T* <a class="el" href="classcsRef.html">csRef</a>< T >::operator-> </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td width="100%"> const<code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Dereference underlying object. <p> <p>Definition at line <a class="el" href="ref_8h-source.html#l00349">349</a> of file <a class="el" href="ref_8h-source.html">ref.h</a>.</p> </div> </div><p> <a class="anchor" name="4f7be769d0536f6cf0e2058cff6b60dd"></a><!-- doxytag: member="csRef::operator=" ref="4f7be769d0536f6cf0e2058cff6b60dd" args="(csRef const &other)" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T> </div> <table class="memname"> <tr> <td class="memname"><a class="el" href="classcsRef.html">csRef</a>& <a class="el" href="classcsRef.html">csRef</a>< T >::operator= </td> <td>(</td> <td class="paramtype"><a class="el" href="classcsRef.html">csRef</a>< T > const & </td> <td class="paramname"> <em>other</em> </td> <td> ) </td> <td width="100%"><code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Assign another csRef<> of the same type to this one. <p> <p>Definition at line <a class="el" href="ref_8h-source.html#l00301">301</a> of file <a class="el" href="ref_8h-source.html">ref.h</a>.</p> </div> </div><p> <a class="anchor" name="92165a22a0e93aaf93a92a83698b96aa"></a><!-- doxytag: member="csRef::operator=" ref="92165a22a0e93aaf93a92a83698b96aa" args="(csRef< T2 > const &other)" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T> </div> <div class="memtemplate"> template<class T2> </div> <table class="memname"> <tr> <td class="memname"><a class="el" href="classcsRef.html">csRef</a>& <a class="el" href="classcsRef.html">csRef</a>< T >::operator= </td> <td>(</td> <td class="paramtype"><a class="el" href="classcsRef.html">csRef</a>< T2 > const & </td> <td class="paramname"> <em>other</em> </td> <td> ) </td> <td width="100%"><code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Assign another assignment-compatible csRef<T2> to this one. <p> <p>Definition at line <a class="el" href="ref_8h-source.html#l00293">293</a> of file <a class="el" href="ref_8h-source.html">ref.h</a>.</p> </div> </div><p> <a class="anchor" name="d815a0a58a68346ed410ee98c01acd62"></a><!-- doxytag: member="csRef::operator=" ref="d815a0a58a68346ed410ee98c01acd62" args="(T *newobj)" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T> </div> <table class="memname"> <tr> <td class="memname"><a class="el" href="classcsRef.html">csRef</a>& <a class="el" href="classcsRef.html">csRef</a>< T >::operator= </td> <td>(</td> <td class="paramtype">T * </td> <td class="paramname"> <em>newobj</em> </td> <td> ) </td> <td width="100%"><code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Assign a raw object reference to this smart pointer. <p> <dl class="remark" compact><dt><b>Remarks:</b></dt><dd>This function calls the object's IncRef() method. Because of this you should not assign a reference created with the new operator to a <a class="el" href="classcsRef.html" title="A smart pointer.">csRef</a> object driectly. The following code will produce a memory leak: <div class="fragment"><pre class="fragment"> <a class="code" href="classcsRef.html" title="A smart pointer.">csRef<iEvent></a> <span class="keyword">event</span> = <span class="keyword">new</span> csEvent; </pre></div> If you are assigning a new object to a <a class="el" href="classcsRef.html" title="A smart pointer.">csRef</a>, use AttachNew(T* newObj) instead. </dd></dl> <p>Definition at line <a class="el" href="ref_8h-source.html#l00244">244</a> of file <a class="el" href="ref_8h-source.html">ref.h</a>.</p> </div> </div><p> <a class="anchor" name="c3904da8a2c8113cbd89f049c7052a06"></a><!-- doxytag: member="csRef::operator=" ref="c3904da8a2c8113cbd89f049c7052a06" args="(const csPtr< T > &newobj)" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T> </div> <table class="memname"> <tr> <td class="memname"><a class="el" href="classcsRef.html">csRef</a>& <a class="el" href="classcsRef.html">csRef</a>< T >::operator= </td> <td>(</td> <td class="paramtype">const <a class="el" href="classcsPtr.html">csPtr</a>< T > & </td> <td class="paramname"> <em>newobj</em> </td> <td> ) </td> <td width="100%"><code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Assign a <a class="el" href="classcsPtr.html" title="A pointer encapsulator.">csPtr</a> to a smart pointer. <p> Doesn't call IncRef() on the object since it is assumed that the object in <a class="el" href="classcsPtr.html" title="A pointer encapsulator.">csPtr</a> is already IncRef()'ed. <dl class="remark" compact><dt><b>Remarks:</b></dt><dd>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. </dd></dl> <p>Definition at line <a class="el" href="ref_8h-source.html#l00216">216</a> of file <a class="el" href="ref_8h-source.html">ref.h</a>.</p> <p>Referenced by <a class="el" href="ref_8h-source.html#l00293">csRef< iGraphics2D >::operator=()</a>.</p> </div> </div><p> <hr><h2>Friends And Related Function Documentation</h2> <a class="anchor" name="d6e6480db3c13349078aa4fa9ff3b0ba"></a><!-- doxytag: member="csRef::operator!=" ref="d6e6480db3c13349078aa4fa9ff3b0ba" args="(T *obj, const csRef &r1)" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T> </div> <table class="memname"> <tr> <td class="memname">bool operator!= </td> <td>(</td> <td class="paramtype">T * </td> <td class="paramname"> <em>obj</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const <a class="el" href="classcsRef.html">csRef</a>< T > & </td> <td class="paramname"> <em>r1</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"><code> [friend]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Test if object pointed to by reference is different from obj. <p> <p>Definition at line <a class="el" href="ref_8h-source.html#l00333">333</a> of file <a class="el" href="ref_8h-source.html">ref.h</a>.</p> </div> </div><p> <a class="anchor" name="4a03d6661e4a719fc551fbd372d7d7ac"></a><!-- doxytag: member="csRef::operator!=" ref="4a03d6661e4a719fc551fbd372d7d7ac" args="(const csRef &r1, T *obj)" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T> </div> <table class="memname"> <tr> <td class="memname">bool operator!= </td> <td>(</td> <td class="paramtype">const <a class="el" href="classcsRef.html">csRef</a>< T > & </td> <td class="paramname"> <em>r1</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">T * </td> <td class="paramname"> <em>obj</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"><code> [friend]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Test if object pointed to by reference is different from obj. <p> <p>Definition at line <a class="el" href="ref_8h-source.html#l00323">323</a> of file <a class="el" href="ref_8h-source.html">ref.h</a>.</p> </div> </div><p> <a class="anchor" name="890a8b4f61f83243a20ac95a7386745f"></a><!-- doxytag: member="csRef::operator!=" ref="890a8b4f61f83243a20ac95a7386745f" args="(const csRef &r1, const csRef &r2)" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T> </div> <table class="memname"> <tr> <td class="memname">bool operator!= </td> <td>(</td> <td class="paramtype">const <a class="el" href="classcsRef.html">csRef</a>< T > & </td> <td class="paramname"> <em>r1</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const <a class="el" href="classcsRef.html">csRef</a>< T > & </td> <td class="paramname"> <em>r2</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"><code> [friend]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Test if the two references point to different object. <p> <p>Definition at line <a class="el" href="ref_8h-source.html#l00313">313</a> of file <a class="el" href="ref_8h-source.html">ref.h</a>.</p> </div> </div><p> <a class="anchor" name="53d2457de239a1a9b0b6761ff462087e"></a><!-- doxytag: member="csRef::operator<" ref="53d2457de239a1a9b0b6761ff462087e" args="(const csRef &r1, const csRef &r2)" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T> </div> <table class="memname"> <tr> <td class="memname">bool operator< </td> <td>(</td> <td class="paramtype">const <a class="el" href="classcsRef.html">csRef</a>< T > & </td> <td class="paramname"> <em>r1</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const <a class="el" href="classcsRef.html">csRef</a>< T > & </td> <td class="paramname"> <em>r2</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"><code> [friend]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Test the relationship of the addresses of two objects. <p> <dl class="remark" compact><dt><b>Remarks:</b></dt><dd>Mainly useful when csRef<> is used as the subject of csComparator<>, which employs operator< for comparisons. </dd></dl> <p>Definition at line <a class="el" href="ref_8h-source.html#l00342">342</a> of file <a class="el" href="ref_8h-source.html">ref.h</a>.</p> </div> </div><p> <a class="anchor" name="6b81931630878c9b00f1c13067adeb4c"></a><!-- doxytag: member="csRef::operator==" ref="6b81931630878c9b00f1c13067adeb4c" args="(T *obj, const csRef &r1)" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T> </div> <table class="memname"> <tr> <td class="memname">bool operator== </td> <td>(</td> <td class="paramtype">T * </td> <td class="paramname"> <em>obj</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const <a class="el" href="classcsRef.html">csRef</a>< T > & </td> <td class="paramname"> <em>r1</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"><code> [friend]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Test if object pointed to by reference is same as obj. <p> <p>Definition at line <a class="el" href="ref_8h-source.html#l00328">328</a> of file <a class="el" href="ref_8h-source.html">ref.h</a>.</p> </div> </div><p> <a class="anchor" name="b6d5932063bae61e7293783c9ebd256f"></a><!-- doxytag: member="csRef::operator==" ref="b6d5932063bae61e7293783c9ebd256f" args="(const csRef &r1, T *obj)" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T> </div> <table class="memname"> <tr> <td class="memname">bool operator== </td> <td>(</td> <td class="paramtype">const <a class="el" href="classcsRef.html">csRef</a>< T > & </td> <td class="paramname"> <em>r1</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">T * </td> <td class="paramname"> <em>obj</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"><code> [friend]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Test if object pointed to by reference is same as obj. <p> <p>Definition at line <a class="el" href="ref_8h-source.html#l00318">318</a> of file <a class="el" href="ref_8h-source.html">ref.h</a>.</p> </div> </div><p> <a class="anchor" name="051f0dced968aaf8d7af4c59d16b934f"></a><!-- doxytag: member="csRef::operator==" ref="051f0dced968aaf8d7af4c59d16b934f" args="(const csRef &r1, const csRef &r2)" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T> </div> <table class="memname"> <tr> <td class="memname">bool operator== </td> <td>(</td> <td class="paramtype">const <a class="el" href="classcsRef.html">csRef</a>< T > & </td> <td class="paramname"> <em>r1</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const <a class="el" href="classcsRef.html">csRef</a>< T > & </td> <td class="paramname"> <em>r2</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"><code> [friend]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Test if the two references point to same object. <p> <p>Definition at line <a class="el" href="ref_8h-source.html#l00308">308</a> of file <a class="el" href="ref_8h-source.html">ref.h</a>.</p> </div> </div><p> <hr>The documentation for this class was generated from the following file:<ul> <li>csutil/<a class="el" href="ref_8h-source.html">ref.h</a></ul> <hr size="1"><address><small>Generated for Crystal Space 1.2.1 by <a href="http://www.doxygen.org/index.html">doxygen</a> 1.5.3 </small></address> </div></body> </html>