任何人都可以解釋這個代碼提取正在做什麼?我的第一個猜測是,d()
調用它本身的析構函數,但後來我想知道爲什麼你不能自己調用T
的析構函數。這是什麼 - >〜T()呢?
class T
{
void d()
{
this -> ~T();
}
}
在此先感謝您。
任何人都可以解釋這個代碼提取正在做什麼?我的第一個猜測是,d()
調用它本身的析構函數,但後來我想知道爲什麼你不能自己調用T
的析構函數。這是什麼 - >〜T()呢?
class T
{
void d()
{
this -> ~T();
}
}
在此先感謝您。
明確在this
上調用T
的析構函數。 T
的析構函數的名稱是~T
。
通常這不是必須的,因爲當C++處理超出範圍或當你使用delete
它時,C++負責調用它的析構函數。沒有更多的上下文,很難說代碼中發生了什麼,爲什麼作者認爲這是必要的。
它看起來像它調用當前類的析構函數......這很奇怪,基本上它會重置對象,如果析構函數被正確寫入......但通常你將不得不重新實例化成員變量也是如此。
你是對的。
d()
調用析構函數,也可以直接調用析構函數。
請記住,這不會恢復內存作爲調用delete
會。
我應該顯式調用一個局部變量的析構函數嗎?
不!
析構函數將在創建本地的塊的close}處再次調用。這是語言的保證;它自動發生;沒有辦法阻止它的發生。但是,第二次調用同一個對象的析構函數可能會導致非常糟糕的結果!砰!你死定了!
更多細節 - http://www.parashift.com/c++-faq-lite/dtors.html#faq-11.1
你怎麼知道它在局部變量的上下文中被使用?如果你使用放置新的,你需要明確調用析構函數。我沒有理由爲它聲明一個成員函數。 – rasmus 2012-02-13 20:58:51
當你絕對,肯定需要摧毀_this_。 – rrhartjr 2012-02-13 20:38:36
@rrhartjr:爲什麼不做一個明確的'destroy'方法,那麼這也被析構函數調用?這是不那麼hacky和魔術,或者我錯過了什麼? – 2012-02-13 20:39:17
相關的C++常見問題http://www.parashift.com/c++-faq-lite/dtors.html#faq-11.10 – mkb 2012-02-13 20:39:38