未调用析构函数
Destructors not called
为什么不调用析构函数?
即使我已经为 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;
}
为什么不调用构造函数?
一旦退出包含对象的块,堆栈上分配的对象的析构函数就会执行。
如果稍微修改,您的代码将显示在getch()
之前调用的析构函数
int main() {
{
A a;
B b;
}
getch();
return 0;
}
在这里,我使用了一对额外的大括号来定义内部块。当块退出时(因此在等待键盘输入之前),在此块中定义的对象将被销毁。
在您的代码中,当 main
正文块退出时调用析构函数,这意味着 AFTER 等待键盘。
g++ 4.6 没有问题
mahmood@la:~$ g++ -o test test.cpp
mahmood@la:~$ ./test
In A const.
In A const.
In B const.
In B dest.
In A dest.
In A dest.mahmood@la:~$
class A {
public :
A() {
cout<<"nIn A const.";
}
virtual ~A() {
cout<<"nIn A dest.";
}
};
解构器应该是virtual
的。
相关文章:
- 析构函数调用
- 在具有向量的类构造函数中进行析构函数调用
- 从 c++ 中派生类的析构函数调用虚函数
- C++析构函数调用两次,堆栈分配的复合对象
- C++ 在析构函数调用之前删除的动态成员数组
- 析构函数调用c++中的一个向量
- Singleton模式中的手动析构函数调用:调用多次
- 从内部类的析构函数调用虚拟函数
- 与 boost odeint 集成期间的析构函数调用
- 堆栈展开如何与析构函数调用有关?
- C++:优化析构函数调用
- 以逗号分隔的表达式中的析构函数调用
- GCC 9.1 返回 void& 作为显式析构函数调用的结果类型。这是一个错误吗?
- 从C++中的虚拟析构函数调用虚拟方法
- 从指针返回对象时出现意外的析构函数调用
- 使用 decltype 显式析构函数调用
- C++析构函数调用了错误的对象
- 了解虚拟函数和析构函数调用
- 多重继承析构函数调用他自己和父析构函数?c++
- 析构函数调用表单不适当的库