📄 smartptr_8h-source.html
字号:
<a name="l00148"></a>00148 <span class="keywordflow">if</span> (m_p && --m_p->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->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<</span>T *<span class="keyword">></span>(&r);<a name="l00158"></a>00158 m_p->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> <<span class="keyword">class</span> T> T* <a class="code" href="classcounted__ptr.html#8bd7974ddad0830a587475ae25847148">counted_ptr<T>::get</a>()<a name="l00163"></a>00163 {<a name="l00164"></a>00164 <span class="keywordflow">if</span> (m_p && m_p->m_referenceCount > 1)<a name="l00165"></a>00165 {<a name="l00166"></a>00166 T *temp = m_p->clone();<a name="l00167"></a>00167 m_p->m_referenceCount--;<a name="l00168"></a>00168 m_p = temp;<a name="l00169"></a>00169 m_p->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> <<span class="keyword">class</span> T> <a class="code" href="classcounted__ptr.html">counted_ptr<T></a> & <a class="code" href="classcounted__ptr.html#ce78083c322daa7e82408407d6eabc91">counted_ptr<T>::operator=</a>(<span class="keyword">const</span> <a class="code" href="classcounted__ptr.html">counted_ptr<T></a>& 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 && --m_p->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->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> <<span class="keyword">class</span> T> <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><T>[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->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<T></a>& operator[](<span class="keywordtype">size_t</span> index)<a name="l00198"></a>00198 {assert(index<this->m_size); <span class="keywordflow">return</span> this->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<T></a>& operator[](<span class="keywordtype">size_t</span> index)<span class="keyword"> const</span><a name="l00200"></a>00200 <span class="keyword"> </span>{assert(index<this->m_size); <span class="keywordflow">return</span> this->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->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<T></a> *newPtr = <span class="keyword">new</span> <a class="code" href="classmember__ptr.html">member_ptr<T></a>[newSize];<a name="l00206"></a>00206 <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i=0; i<this->m_size && i<newSize; i++)<a name="l00207"></a>00207 newPtr[i].reset(this->m_ptr[i].release());<a name="l00208"></a>00208 <span class="keyword">delete</span> [] this->m_ptr;<a name="l00209"></a>00209 this->m_size = newSize;<a name="l00210"></a>00210 this->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<T></a> &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<T></a> &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<T></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 <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 + -