2012-02-13 90 views
3

任何人都可以解釋這個代碼提取正在做什麼?我的第一個猜測是,d()調用它本身的析構函數,但後來我想知道爲什麼你不能自己調用​​T的析構函數。這是什麼 - >〜T()呢?

class T 
{ 
    void d() 
    { 
     this -> ~T(); 
    } 
} 

在此先感謝您。

回答

9

明確this上調用T的析構函數。 T的析構函數的名稱是~T

通常這不是必須的,因爲當C++處理超出範圍或當你使用delete它時,C++負責調用它的析構函數。沒有更多的上下文,很難說代碼中發生了什麼,爲什麼作者認爲這是必要的。

+0

當你絕對,肯定需要摧毀_this_。 – rrhartjr 2012-02-13 20:38:36

+0

@rrhartjr:爲什麼不做一個明確的'destroy'方法,那麼這也被析構函數調用?這是不那麼hacky和魔術,或者我錯過了什麼? – 2012-02-13 20:39:17

+2

相關的C++常見問題http://www.parashift.com/c++-faq-lite/dtors.html#faq-11.10 – mkb 2012-02-13 20:39:38

-1

它看起來像它調用當前類的析構函數......這很奇怪,基本上它會重置對象,如果析構函數被正確寫入......但通常你將不得不重新實例化成員變量也是如此。

2

你是對的。

d()調用析構函數,也可以直接調用析構函數。

請記住,這不會恢復內存作爲調用delete會。

1

我應該顯式調用一個局部變量的析構函數嗎?

不!

析構函數將在創建本地的塊的close}處再次調用。這是語言的保證;它自動發生;沒有辦法阻止它的發生。但是,第二次調用同一個對象的析構函數可能會導致非常糟糕的結果!砰!你死定了!

更多細節 - http://www.parashift.com/c++-faq-lite/dtors.html#faq-11.1

+0

你怎麼知道它在局部變量的上下文中被使用?如果你使用放置新的,你需要明確調用析構函數。我沒有理由爲它聲明一個成員函數。 – rasmus 2012-02-13 20:58:51

相關問題