为什么我编写这样的代码( X 是泛型类)调用构造函数和析构函数
int main()
{
X one ();
one.~X();
return 0;
}
给我这个错误?
Double free() or corruption:C++
答案 0 :(得分:4)
你几乎从不明确地调用析构函数,当一个对象超出范围时(或delete
d,如果在堆上分配),它们会被隐式调用。首先,您通过调用background
手动取消分配background.~Y()
的数组,接下来同一个数组会尝试在下一个}
再次释放。
答案 1 :(得分:1)
调用对象的析构函数几乎总是错误的。实际上我从未遇到过这样的情况。您需要阅读有关RAII的内容,也许这个示例将帮助您了解错误原因:
#include <iostream>
struct Foo{
Foo() { std::cout << " constructor " << std::endl; }
~Foo() { std::cout << " destructor " << std::endl; }
};
int main(){
Foo foo;
// foo.~Foo(); // <- never ever do this !
} // <- object is destroyed here !
运行此命令,您将看到已经调用了析构函数。销毁已经被破坏的物体会导致你得到的错误。