【发布时间】:2013-02-07 03:35:15
【问题描述】:
我听说空析构函数不做任何事情,调用它并不会删除对象。 但在代码中:
#include <iostream>
#include <set>
class a
{
public:
~a()
{}
std::set <int> myset;
};
int main()
{
a object;
object.myset.insert(55);
object.~a();
object.myset.insert(20);
std::cout << object.myset.size();
}
我得到: “* glibc detected * /.app: double free or corruption (fasttop):”,然后是“ABORT”。
如果重要的话,我启用了 c++11 标志。那么空构造函数实际上是做什么的呢?它有作用,而我读到它没有。
【问题讨论】:
-
问题在于
object.~a();不要手动调用析构函数。 -
我不想做,我只想知道析构函数到底做了什么。
-
基本上它会将对象的内存释放回系统。所有成员变量的析构函数也被这个代码在后面的感觉中调用。
-
@user1873947:析构函数销毁所有成员变量。您直接调用 dtor 的主要时间是与使用 Placement new 结合使用。
-
添加一个 B 类作为您的成员变量,而不是设置。在 B 和 A 的构造函数/析构函数中使用 cout 看看到底发生了什么。
标签: c++ destructor