天天看點

new delete操作符重載

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

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

<code>using</code> <code>namespace</code> <code>std;</code>

<code>class</code> <code>A{</code>

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

<code>    </code><code>A(</code><code>void</code><code>){</code>

<code>        </code><code>cout &lt;&lt; </code><code>"A::A()"</code> <code>&lt;&lt; endl;</code>

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

<code>    </code><code>~A(</code><code>void</code><code>){</code>

<code>        </code><code>cout &lt;&lt; </code><code>"A::~A()"</code> <code>&lt;&lt; endl;</code>

<code>    </code><code>static</code> <code>void</code><code>* operator </code><code>new</code><code>(</code><code>size_t</code> <code>size){</code>

<code>        </code><code>cout &lt;&lt; </code><code>"A::new"</code> <code>&lt;&lt; endl;</code>

<code>        </code><code>void</code><code>* pv = </code><code>malloc</code><code>(size);</code>

<code>        </code><code>return</code> <code>pv;</code>

<code>    </code><code>static</code> <code>void</code> <code>operator </code><code>delete</code><code>(</code><code>void</code><code>* pv) {</code>

<code>        </code><code>cout &lt;&lt; </code><code>"A::delete"</code> <code>&lt;&lt; endl;</code>

<code>        </code><code>free</code><code>(pv);</code>

<code>};</code>

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

<code>    </code><code>A* pa = </code><code>new</code> <code>A;</code>

<code>    </code><code>delete</code> <code>pa;</code>

<code>    </code><code>return</code> <code>0;</code>

<code>}</code>

結果為:

A::new

A::A()

A::~A()

A::delete

由此我們可以知道,new 對象時,先new在調用其構造,

delete對象的時,先調用其析構,再delete

本文轉自神ge 51CTO部落格,原文連結:http://blog.51cto.com/12218412/1866959

繼續閱讀