内置类型的析构函数(int、char等) 在C++中,下面的代码给出编译器错误: void destruct1 (int * item) { item->~int(); }

内置类型的析构函数(int、char等) 在C++中,下面的代码给出编译器错误: void destruct1 (int * item) { item->~int(); },c++,constructor,destructor,typedef,C++,Constructor,Destructor,Typedef,这段代码几乎相同,我只是将int类型定义为另一种类型,然后发生了一些神奇的事情: typedef int myint; void destruct2 (myint * item) { item->~myint(); } 为什么第二个代码可以工作?int是否仅仅因为被typedef而得到析构函数 如果你想知道为什么有人这么做:这是重构C++代码的结果。我们正在移除标准堆,并将其替换为自制池。这需要我们调用placement new和析构函数。我知道为基元类型调用析构函数是无用的,但我

这段代码几乎相同,我只是将int类型定义为另一种类型,然后发生了一些神奇的事情:

typedef int myint;

void destruct2 (myint * item)
{
  item->~myint();
}
为什么第二个代码可以工作?int是否仅仅因为被typedef而得到析构函数

如果你想知道为什么有人这么做:这是重构C++代码的结果。我们正在移除标准堆,并将其替换为自制池。这需要我们调用placement new和析构函数。我知道为基元类型调用析构函数是无用的,但我们希望在代码中使用它们,以防以后用真实类替换pod

发现裸int不起作用,而typedef的却起作用,真是令人惊讶


顺便说一句,我有一个涉及模板函数的解决方案。我们只需在模板中键入def,一切都很好。

这就是使您的代码能够处理泛型参数的原因。考虑容器C:

template<typename T>
struct C {
    // ...
    ~C() {
        for(size_t i = 0; i<elements; i++)
            buffer[i].~T();
    }
};
模板
结构C{
// ...
~C(){

对于(size_t i=0;我认为这就是旧编译器(2012-2014)中std::is_可破坏性如此不一致的原因)这里是关于
int
不是类型名的最后一句的链接:。也检查一下这个