【发布时间】:2011-11-15 19:11:49
【问题描述】:
我正在调用析构函数来释放内存,但它并没有删除我的对象。背后的原因是什么?
我的代码是这样的:
class A
{
public:
int a;
A()
{
cout << "a" << endl;
}
};
class B :public A
{
public:
int b;
B()
{
cout << "b" << endl; a = 10; b = 20;
}
~B()
{
cout << a << b << endl;
}
};
我正在使用它:
int main()
{
{
B b;
b.~B();
b.b=100; // why this step is executed?
}
int x;
cin>>x;
return 0;
}
【问题讨论】:
-
你只调用了析构函数,没有使用delete。这里没有释放内存。
-
你到底想做什么?除了在放置
new后清理之外,没有太多理由明确销毁对象... -
你为什么一开始就显式调用析构函数?你期望会发生什么?该对象是在堆栈上创建的,并且在您退出声明它的范围之前不会被弹出,因此在您的微不足道的情况下,即使您在调用析构函数后对该对象进行操作,也不会发生任何坏事。此外,在执行
b.b=100;之后,编译器将再次调用析构函数,因为那是b生命周期的结束(由 {} 划分)。
标签: c++ destructor