對指針調用delete之後要記得把指針指派為nullptr
否則,如果這個指針被重複delete,會當機。
<code>#include <iostream></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 << __func__ << </code><code>"(), this = "</code> <code><< </code><code>this</code> <code><< endl;</code>
<code> </code><code>}</code>
<code> </code><code>~Tree() { cout << </code><code>"~Tree()\n"</code><code>; }</code>
<code>#if 0 </code>
<code> </code><code>friend</code> <code>ostream&</code>
<code> </code><code>operator<<(ostream& os, </code><code>const</code> <code>Tree* t) {</code>
<code> </code><code>return</code> <code>os << </code><code>"Tree height is: "</code>
<code> </code><code><< t->height << endl;</code>
<code>#else</code>
<code> </code><code>operator<<(ostream& os, </code><code>const</code> <code>Tree& t) {</code>
<code> </code><code><< t.height << 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,如需轉載請自行聯系原作者