C++中子类析构函数不执行问题

1、C++中有时遇到子类析构函数不执行的情况
#include<iostream>
using namespace std;
 
class A{
public:
A(){}
~A(){cout << "A xigou \n";}
};
class B:public A{
public:
B(){}
~B(){cout << "B xigou \n";}
};
int main(){
A *a=new A;
delete a;
a=new B;
delete a;
}

 

 

运行结果是:
A xigou
A xigou
修改一下使A析构函数定义为虚函数
#include<iostream>
using namespace std;
 
class A{
public:
A(){}
virtual ~A(){cout << "A xigou \n";}
};
class B:public A{
public:
B(){}
~B(){cout << "B xigou \n";}
};
int main(){
A *a=new A;
delete a;
a=new B;
delete a;
}

 

运行结果是:
A xigou
B xigou
A 析构
 
可以看到析构函数也可以看成是普通的成员方法,也会被父类析构函数覆盖

posted on 2016-10-25 10:10  Just_Boy  阅读(736)  评论(0)    收藏  举报