在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