⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smartptr_8h-source.html

📁 著名的密码库Crypto++的文档 C++语言的杰作。程序员必备。
💻 HTML
📖 第 1 页 / 共 3 页
字号:
<a name="l00148"></a>00148         <span class="keywordflow">if</span> (m_p &amp;&amp; --m_p-&gt;m_referenceCount == 0)<a name="l00149"></a>00149                 <span class="keyword">delete</span> m_p;<a name="l00150"></a>00150         <span class="keywordflow">if</span> (r.m_referenceCount == 0)<a name="l00151"></a>00151         {<a name="l00152"></a>00152                 m_p = r.clone();<a name="l00153"></a>00153                 m_p-&gt;m_referenceCount = 1;<a name="l00154"></a>00154         }<a name="l00155"></a>00155         <span class="keywordflow">else</span><a name="l00156"></a>00156         {<a name="l00157"></a>00157                 m_p = <span class="keyword">const_cast&lt;</span>T *<span class="keyword">&gt;</span>(&amp;r);<a name="l00158"></a>00158                 m_p-&gt;m_referenceCount++;<a name="l00159"></a>00159         }<a name="l00160"></a>00160 }<a name="l00161"></a>00161 <a name="l00162"></a><a class="code" href="classcounted__ptr.html#da23e80b4c656c9cbcc8dae43c7caa3a">00162</a> <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; T* <a class="code" href="classcounted__ptr.html#8bd7974ddad0830a587475ae25847148">counted_ptr&lt;T&gt;::get</a>()<a name="l00163"></a>00163 {<a name="l00164"></a>00164         <span class="keywordflow">if</span> (m_p &amp;&amp; m_p-&gt;m_referenceCount &gt; 1)<a name="l00165"></a>00165         {<a name="l00166"></a>00166                 T *temp = m_p-&gt;clone();<a name="l00167"></a>00167                 m_p-&gt;m_referenceCount--;<a name="l00168"></a>00168                 m_p = temp;<a name="l00169"></a>00169                 m_p-&gt;m_referenceCount = 1;<a name="l00170"></a>00170         }<a name="l00171"></a>00171         <span class="keywordflow">return</span> m_p;<a name="l00172"></a>00172 }<a name="l00173"></a>00173 <a name="l00174"></a><a class="code" href="classcounted__ptr.html#ce78083c322daa7e82408407d6eabc91">00174</a> <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <a class="code" href="classcounted__ptr.html">counted_ptr&lt;T&gt;</a> &amp; <a class="code" href="classcounted__ptr.html#ce78083c322daa7e82408407d6eabc91">counted_ptr&lt;T&gt;::operator=</a>(<span class="keyword">const</span> <a class="code" href="classcounted__ptr.html">counted_ptr&lt;T&gt;</a>&amp; rhs)<a name="l00175"></a>00175 {<a name="l00176"></a>00176         <span class="keywordflow">if</span> (m_p != rhs.<a class="code" href="classcounted__ptr.html#d642776ec12a9d857bfa6edbddf3b30c">m_p</a>)<a name="l00177"></a>00177         {<a name="l00178"></a>00178                 <span class="keywordflow">if</span> (m_p &amp;&amp; --m_p-&gt;m_referenceCount == 0)<a name="l00179"></a>00179                         <span class="keyword">delete</span> m_p;<a name="l00180"></a>00180                 m_p = rhs.<a class="code" href="classcounted__ptr.html#d642776ec12a9d857bfa6edbddf3b30c">m_p</a>;<a name="l00181"></a>00181                 <span class="keywordflow">if</span> (m_p)<a name="l00182"></a>00182                         m_p-&gt;m_referenceCount++;<a name="l00183"></a>00183         }<a name="l00184"></a>00184         <span class="keywordflow">return</span> *<span class="keyword">this</span>;<a name="l00185"></a>00185 }<a name="l00186"></a>00186 <a name="l00187"></a>00187 <span class="comment">// ********************************************************</span><a name="l00188"></a>00188 <a name="l00189"></a><a class="code" href="classvector__member__ptrs.html">00189</a> <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <span class="keyword">class </span><a class="code" href="classvector__member__ptrs.html">vector_member_ptrs</a><a name="l00190"></a>00190 {<a name="l00191"></a>00191 <span class="keyword">public</span>:<a name="l00192"></a><a class="code" href="classvector__member__ptrs.html#4ccb624330e43c1121a2b74b2487307c">00192</a>         <a class="code" href="classvector__member__ptrs.html">vector_member_ptrs</a>(<span class="keywordtype">size_t</span> size=0)<a name="l00193"></a>00193                 : m_size(size), m_ptr(new <a class="code" href="classmember__ptr.html">member_ptr</a>&lt;T&gt;[size]) {}<a name="l00194"></a><a class="code" href="classvector__member__ptrs.html#13c2ace1e29967b576b777dc2fba2e36">00194</a>         ~<a class="code" href="classvector__member__ptrs.html">vector_member_ptrs</a>()<a name="l00195"></a>00195                 {<span class="keyword">delete</span> [] this-&gt;m_ptr;}<a name="l00196"></a>00196 <a name="l00197"></a><a class="code" href="classvector__member__ptrs.html#8c5f0966af15b7a3a15b7220fc1980a6">00197</a>         <a class="code" href="classmember__ptr.html">member_ptr&lt;T&gt;</a>&amp; operator[](<span class="keywordtype">size_t</span> index)<a name="l00198"></a>00198                 {assert(index&lt;this-&gt;m_size); <span class="keywordflow">return</span> this-&gt;m_ptr[index];}<a name="l00199"></a><a class="code" href="classvector__member__ptrs.html#1a59a4d2b3212d4d9916690fadf2faff">00199</a>         <span class="keyword">const</span> <a class="code" href="classmember__ptr.html">member_ptr&lt;T&gt;</a>&amp; operator[](<span class="keywordtype">size_t</span> index)<span class="keyword"> const</span><a name="l00200"></a>00200 <span class="keyword">                </span>{assert(index&lt;this-&gt;m_size); <span class="keywordflow">return</span> this-&gt;m_ptr[index];}<a name="l00201"></a>00201 <a name="l00202"></a><a class="code" href="classvector__member__ptrs.html#7d72d8f4b6c8cf4936b921441d52ca30">00202</a>         <span class="keywordtype">size_t</span> size()<span class="keyword"> const </span>{<span class="keywordflow">return</span> this-&gt;m_size;}<a name="l00203"></a><a class="code" href="classvector__member__ptrs.html#717020477d8a733b7ed6c734dd6455c9">00203</a>         <span class="keywordtype">void</span> resize(<span class="keywordtype">size_t</span> newSize)<a name="l00204"></a>00204         {<a name="l00205"></a>00205                 <a class="code" href="classmember__ptr.html">member_ptr&lt;T&gt;</a> *newPtr = <span class="keyword">new</span> <a class="code" href="classmember__ptr.html">member_ptr&lt;T&gt;</a>[newSize];<a name="l00206"></a>00206                 <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i=0; i&lt;this-&gt;m_size &amp;&amp; i&lt;newSize; i++)<a name="l00207"></a>00207                         newPtr[i].reset(this-&gt;m_ptr[i].release());<a name="l00208"></a>00208                 <span class="keyword">delete</span> [] this-&gt;m_ptr;<a name="l00209"></a>00209                 this-&gt;m_size = newSize;<a name="l00210"></a>00210                 this-&gt;m_ptr = newPtr;<a name="l00211"></a>00211         }<a name="l00212"></a>00212 <a name="l00213"></a>00213 <span class="keyword">private</span>:<a name="l00214"></a>00214         <a class="code" href="classvector__member__ptrs.html">vector_member_ptrs</a>(<span class="keyword">const</span> <a class="code" href="classvector__member__ptrs.html">vector_member_ptrs&lt;T&gt;</a> &amp;c);     <span class="comment">// copy not allowed</span><a name="l00215"></a>00215         <span class="keywordtype">void</span> <a class="code" href="classcounted__ptr.html#ce78083c322daa7e82408407d6eabc91">operator=</a>(<span class="keyword">const</span> <a class="code" href="classvector__member__ptrs.html">vector_member_ptrs&lt;T&gt;</a> &amp;x);         <span class="comment">// assignment not allowed</span><a name="l00216"></a>00216 <a name="l00217"></a>00217         <span class="keywordtype">size_t</span> m_size;<a name="l00218"></a>00218         <a class="code" href="classmember__ptr.html">member_ptr&lt;T&gt;</a> *m_ptr;<a name="l00219"></a>00219 };<a name="l00220"></a>00220 <a name="l00221"></a>00221 NAMESPACE_END<a name="l00222"></a>00222 <a name="l00223"></a>00223 <span class="preprocessor">#endif</span></pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Fri Jun 1 11:11:24 2007 for Crypto++ by&nbsp;<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.2 </small></address></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -