天天看點

對指針調用delete之後要記得把指針指派為nullptr

對指針調用delete之後要記得把指針指派為nullptr

否則,如果這個指針被重複delete,會當機。

<code>#include &lt;iostream&gt;</code>

<code>using</code> <code>std::cout;</code>

<code>using</code> <code>std::endl;</code>

<code>using</code> <code>std::ostream;</code>

<code>class</code> <code>Tree {</code>

<code>  </code><code>int</code> <code>height;</code>

<code>public</code><code>:</code>

<code>  </code><code>Tree(</code><code>int</code> <code>treeHeight) : height(treeHeight) {</code>

<code>    </code><code>cout &lt;&lt; __func__ &lt;&lt; </code><code>"(), this = "</code> <code>&lt;&lt; </code><code>this</code> <code>&lt;&lt; endl;</code>

<code>  </code><code>}</code>

<code>  </code><code>~Tree() { cout &lt;&lt; </code><code>"~Tree()\n"</code><code>; }</code>

<code>#if 0 </code>

<code>  </code><code>friend</code> <code>ostream&amp;</code>

<code>  </code><code>operator&lt;&lt;(ostream&amp; os, </code><code>const</code> <code>Tree* t) {</code>

<code>    </code><code>return</code> <code>os &lt;&lt; </code><code>"Tree height is: "</code>

<code>              </code><code>&lt;&lt; t-&gt;height &lt;&lt; endl;</code>

<code>#else</code>

<code>  </code><code>operator&lt;&lt;(ostream&amp; os, </code><code>const</code> <code>Tree&amp; t) {</code>

<code>              </code><code>&lt;&lt; t.height &lt;&lt; endl;</code>

<code>#endif</code>

<code>}; </code>

<code>int</code> <code>main() {</code>

<code>  </code><code>Tree* t = </code><code>new</code> <code>Tree(40);</code>

<code>  </code><code>delete</code> <code>t;</code>

<code>  </code><code>//t = nullptr;</code>

<code>}</code>

運作結果:

frank@userver:~/project/test/cpp/new_del$ ./a.out 

Tree(), this = 0x13b2010

~Tree()

*** Error in `./a.out': double free or corruption (fasttop): 0x00000000013b2010 ***

Aborted (core dumped)

      本文轉自FrankNie0101 51CTO部落格,原文連結:http://blog.51cto.com/frankniefaquan/1936943,如需轉載請自行聯系原作者