﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-zwicker</title><link>http://www.cppblog.com/zwicker/</link><description /><language>zh-cn</language><lastBuildDate>Sat, 18 Apr 2026 05:26:28 GMT</lastBuildDate><pubDate>Sat, 18 Apr 2026 05:26:28 GMT</pubDate><ttl>60</ttl><item><title>stl find()需要定义operator==</title><link>http://www.cppblog.com/zwicker/archive/2010/04/15/112669.html</link><dc:creator>zwicker</dc:creator><author>zwicker</author><pubDate>Thu, 15 Apr 2010 06:58:00 GMT</pubDate><guid>http://www.cppblog.com/zwicker/archive/2010/04/15/112669.html</guid><wfw:comment>http://www.cppblog.com/zwicker/comments/112669.html</wfw:comment><comments>http://www.cppblog.com/zwicker/archive/2010/04/15/112669.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zwicker/comments/commentRss/112669.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zwicker/services/trackbacks/112669.html</trackback:ping><description><![CDATA[find()在工作的时候要通过 &nbsp; operator== &nbsp; 进行是否相等的比较，因为你还没有定义rcd类的 &nbsp; operator==，所以就出现了上述的错误。定义它的实现即可。
<img src ="http://www.cppblog.com/zwicker/aggbug/112669.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zwicker/" target="_blank">zwicker</a> 2010-04-15 14:58 <a href="http://www.cppblog.com/zwicker/archive/2010/04/15/112669.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>delete和delete[] 的区别</title><link>http://www.cppblog.com/zwicker/archive/2010/04/15/112668.html</link><dc:creator>zwicker</dc:creator><author>zwicker</author><pubDate>Thu, 15 Apr 2010 06:53:00 GMT</pubDate><guid>http://www.cppblog.com/zwicker/archive/2010/04/15/112668.html</guid><wfw:comment>http://www.cppblog.com/zwicker/comments/112668.html</wfw:comment><comments>http://www.cppblog.com/zwicker/archive/2010/04/15/112668.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zwicker/comments/commentRss/112668.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zwicker/services/trackbacks/112668.html</trackback:ping><description><![CDATA[<div class="postmessage ">
<h2>求问delete和delete[] 的区别？？</h2>
<div class=t_msgfontfix>
<table cellSpacing=0 cellPadding=0>
    <tbody>
        <tr>
            <td class=t_msgfont id=postmessage_2058978>C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete，回收用 new[] 分配的一组对象的内存空间的时候用 delete[]。<br><br>楼主的这个问题提得很好。很多人注意到了这个问题，但是却不清楚为什么要这样做，不这样做行不行。<br><br>关于 new[] 和 delete[]，其中又分为两种情况：(1) 为基本数据类型分配和回收空间；(2) 为自定义类型分配和回收空间。<br><br>对于 (1)，上面提供的程序已经证明了 delete[] 和 delete 是等同的。但是对于 (2)，情况就发生了变化。请看下面的程序。<br>
            <div class=blockcode>
            <div id=code0>
            <ol>
                <li>#include &lt;iostream&gt;;<br>
                <li>using namespace std;<br>
                <li><br>
                <li>class T {<br>
                <li>public:<br>
                <li>&nbsp;&nbsp;T() { cout &lt;&lt; "constructor" &lt;&lt; endl; }<br>
                <li>&nbsp;&nbsp;~T() { cout &lt;&lt; "destructor" &lt;&lt; endl; }<br>
                <li>};<br>
                <li><br>
                <li>int main()<br>
                <li>{<br>
                <li>&nbsp;&nbsp;const int NUM = 3;<br>
                <li><br>
                <li>&nbsp;&nbsp;T* p1 = new T[NUM];<br>
                <li>&nbsp;&nbsp;cout &lt;&lt; hex &lt;&lt; p1 &lt;&lt; endl;<br>
                <li>&nbsp;&nbsp;//&nbsp;&nbsp;delete[] p1;<br>
                <li>&nbsp;&nbsp;delete p1;<br>
                <li><br>
                <li>&nbsp;&nbsp;T* p2 = new T[NUM];<br>
                <li>&nbsp;&nbsp;cout &lt;&lt; p2 &lt;&lt; endl;<br>
                <li>&nbsp;&nbsp;delete[] p2;<br>
                <li>}</li>
            </ol>
            </div>
            <em onclick="copycode($('code0'));">复制代码</em></div>
            <br><br>大家可以自己运行这个程序，看一看 delete p1 和 delete[] p1 的不同结果，我就不在这里贴运行结果了。<br><br>从运行结果中我们可以看出，delete p1 在回收空间的过程中，只有 p1[0] 这个对象调用了析构函数，其它对象如 p1[1]、p1[2] 等都没有调用自身的析构函数，这就是问题的症结所在。如果用 delete[]，则在回收空间之前所有对象都会首先调用自己的析构函数。<br><br>基本类型的对象没有析构函数，所以回收基本类型组成的数组空间用 delete 和 delete[] 都是应该可以的；但是对于类对象数组，只能用 delete[]。对于 new 的单个对象，只能用 delete 不能用 delete[] 回收空间。<br><br>所以一个简单的使用原则就是：new 和 delete、new[] 和 delete[] 对应使用。</td>
        </tr>
    </tbody>
</table>
</div>
</div>
<img src ="http://www.cppblog.com/zwicker/aggbug/112668.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zwicker/" target="_blank">zwicker</a> 2010-04-15 14:53 <a href="http://www.cppblog.com/zwicker/archive/2010/04/15/112668.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>multimap erase</title><link>http://www.cppblog.com/zwicker/archive/2010/01/26/106456.html</link><dc:creator>zwicker</dc:creator><author>zwicker</author><pubDate>Tue, 26 Jan 2010 04:00:00 GMT</pubDate><guid>http://www.cppblog.com/zwicker/archive/2010/01/26/106456.html</guid><wfw:comment>http://www.cppblog.com/zwicker/comments/106456.html</wfw:comment><comments>http://www.cppblog.com/zwicker/archive/2010/01/26/106456.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zwicker/comments/commentRss/106456.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zwicker/services/trackbacks/106456.html</trackback:ping><description><![CDATA[&nbsp;typedef multimap&lt;CString, CString&gt;::iterator it_authors;<br>&nbsp;pair&lt;it_authors, it_authors&gt; pos = theApp.m_chatConetentList.equal_range(strDel);<br>&nbsp;if (pos.first!=pos.second)<br>&nbsp;{<br>&nbsp;&nbsp;theApp.m_chatConetentList.erase(pos.first,pos.second);<br>&nbsp;}
<img src ="http://www.cppblog.com/zwicker/aggbug/106456.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zwicker/" target="_blank">zwicker</a> 2010-01-26 12:00 <a href="http://www.cppblog.com/zwicker/archive/2010/01/26/106456.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]取得CString内存缓冲区的字节数</title><link>http://www.cppblog.com/zwicker/archive/2010/01/14/105652.html</link><dc:creator>zwicker</dc:creator><author>zwicker</author><pubDate>Thu, 14 Jan 2010 06:41:00 GMT</pubDate><guid>http://www.cppblog.com/zwicker/archive/2010/01/14/105652.html</guid><wfw:comment>http://www.cppblog.com/zwicker/comments/105652.html</wfw:comment><comments>http://www.cppblog.com/zwicker/archive/2010/01/14/105652.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zwicker/comments/commentRss/105652.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zwicker/services/trackbacks/105652.html</trackback:ping><description><![CDATA[当在MFC程序里调用C程序时，可能需要知道CString内存缓冲区的字节数，尤其是在Unicode的情况下。<br>CString str<br>str.GetLength()取得的是字符数，在Unicode的情况下一个汉字占两个字节，因此GetLength不能取得正确的字节数。<br>有一个方法是使用WideCharToMutiByte函数，<br>但有一个小技巧更简单，<br>CStringA asciiStr(str)<br>asciiStr.GetLength()<br>这时取得的就是正确的字节数了。 
<img src ="http://www.cppblog.com/zwicker/aggbug/105652.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zwicker/" target="_blank">zwicker</a> 2010-01-14 14:41 <a href="http://www.cppblog.com/zwicker/archive/2010/01/14/105652.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>