内置类型的析构函数(int、char等) 在C++中,下面的代码给出编译器错误: void destruct1 (int * item) { item->~int(); }
这段代码几乎相同,我只是将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和析构函数。我知道为基元类型调用析构函数是无用的,但我
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
不是类型名的最后一句的链接:。也检查一下这个