在C++中,以下代码会导致编译器错误:
如果你想知道为什么会这样做:这是C++代码重构所需的。我们正在删除标准堆并用自制池替换它。这需要我们调用placement-new和析构函数。我知道对原始类型调用析构函数是无用的,但我们还是希望将它们放在代码中,以防以后用真正的类替换POD。
发现裸的int不行,但typedef的int却可以工作,这真是个惊喜。
顺便说一句,我有一个涉及模板函数的解决方案。我们只需要在模板中使用typedef,一切都会没问题的。
void destruct1 (int * item)
{
item->~int();
}
这段代码几乎相同,我只是将int typedef为另一种类型,然后发生了一些神奇的事情:
typedef int myint;
void destruct2 (myint * item)
{
item->~myint();
}
为什么第二个代码可以工作?一个int因为被typedef了就会获得析构函数吗?如果你想知道为什么会这样做:这是C++代码重构所需的。我们正在删除标准堆并用自制池替换它。这需要我们调用placement-new和析构函数。我知道对原始类型调用析构函数是无用的,但我们还是希望将它们放在代码中,以防以后用真正的类替换POD。
发现裸的int不行,但typedef的int却可以工作,这真是个惊喜。
顺便说一句,我有一个涉及模板函数的解决方案。我们只需要在模板中使用typedef,一切都会没问题的。