在C++下面的代碼給出了一個編譯器錯誤:析構函數內建類型(INT,焦炭等)
void destruct1 (int * item)
{
item->~int();
}
此代碼幾乎是一樣的,我只是typedef的整型爲另一種類型和一些魔術發生:
typedef int myint;
void destruct2 (myint * item)
{
item->~myint();
}
爲什麼第二個代碼有效? int是否因爲它已被typedefed而獲得析構函數?
如果您想知道爲什麼有人想這樣做:這來自重構C++代碼。我們正在移除標準堆並將其替換爲自制池。這要求我們調用placement-new和析構函數。我知道爲基本類型調用析構函數是沒用的,但是我們希望它們在代碼中,以防我們以後用實際類替換POD。
發現赤裸的int不起作用,但是typedefed的做起來真是令人驚訝。
順便說一句 - 我有一個涉及模板功能的解決方案。我們只需在模板中輸入def並且一切都很好。
+1「The Holy Standard」。 – ApprenticeHacker 2012-01-24 06:03:07