2012-11-03 20 views
2

例如,我們有一個這樣的功能:如何調用模板類型的析構函數?

template <typename TYPE> 
void construct_and_destruct(TYPE & object) 
{ 
    //... 
} 

我們調用構造函數和析構象object.Type()object.~Type()(現在還沒有真)(?WHYY = C

要調用我們可以像new(&object) TYPE()這樣的構造函數。我不知道如何調用析構函數(不存在delete)。這個怎麼做?

+0

您應該將您感興趣的代碼從dtor中分離出來並放入一個單獨的成員函數中,然後調用它。 –

回答

3

您可以調用析構函數爲:

object.~TYPE(); 

,但很可能不是你想要的,並受到雙重刪除。

的構造很簡單,只要:

object = TYPE(); 
+0

你說得對,但'object = TYPE();'執行額外的'operator ='。相反,這更好地使用安置新(與奇怪的語法** =)**)。 – 4Bytes

+0

@ 4Bytes:不,不要做'object。〜TYPE(); new(object)TYPE();''使用'object = TYPE()更簡潔;'讓系統自行清理。 –

+0

@David這是不正確的:你正在做一個任務。 'TYPE'必須在其賦值操作符中假定其之前的一個構造函數已被調用。你會違反。 –

1

object.~TYPE()object.~TYPE::TYPE()都是正確的,我認爲。聽起來有點可疑,你想達到什麼目的?

+0

不,'object。〜TYPE()'不正確。我知道construct_and_destruct是無用的函數,但是我爲** example **編寫了這個函數。 – 4Bytes

+2

'object。〜TYPE()'是正確的。那就是說,你爲什麼要調用析構函數? –

+0

@David Hammen,對不起,我錯了。析構函數也可以工作。它需要執行我的任務。 – 4Bytes

相關問題