为什么没有调用析构函数?
即使我为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;
}
为什么不调用构造函数?
答案 0 :(得分:4)
一旦退出包含对象的块,就会执行堆栈上分配的对象的析构函数。
如果稍微修改,您的代码将显示在getch()
之前调用的析构函数
int main() {
{
A a;
B b;
}
getch();
return 0;
}
这里我使用了一对额外的大括号来定义内部块。退出块时,此块中定义的对象将被销毁(因此在等待键盘输入之前)。
在代码中,退出main
主体块时会调用析构函数,这意味着在等待键盘之后。
答案 1 :(得分:2)
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:~$
答案 2 :(得分:-1)
class A {
public :
A() {
cout<<"\nIn A const.";
}
virtual ~A() {
cout<<"\nIn A dest.";
}
};
desconstructor应该是virtual
。