为什么不调用析构函数?
即使我已经为 A 类和 B 类编写了析构函数,但它没有被调用。
#include<iostream.h>
#include<conio.h>
class A {
public :
A() {
cout<<"\nIn A const.";
}
~A() {
cout<<"\nIn A dest.";
}
};
class B : public A {
public :
B() {
cout<<"\nIn B const.";
}
~B() {
cout<<"\nIn B dest.";
}
};
int main() {
A a;
B b;
getch();
return 0;
}
为什么不调用构造函数?
最佳答案
一旦退出包含对象的 block ,就会立即执行分配在堆栈上的对象的析构函数。
如果稍作修改,您的代码将显示在 getch()
之前调用的析构函数
int main() {
{
A a;
B b;
}
getch();
return 0;
}
在这里,我使用了一对额外的大括号来定义一个内部 block 。当退出该 block 时(因此在等待键盘输入之前),该 block 内定义的对象将被销毁。
在您的代码中,析构函数在 main
主体 block 退出时被调用,这意味着在等待键盘之后。
关于c++ - 未调用析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18809750/