您的位置:首页 > 移动开发 > IOS开发

关于虚拟析构函数

2005-10-22 22:07 323 查看
什么时候才应该将析构函数定义为虚拟呢?当类至少拥有一个虚拟函数时。拥有虚拟函数意味着一个类是派生类的接口,在这种情况下,一个派生类的对象可能通过一个基类指针来销毁。
如果基类的析构函数不是虚拟的,那么派生类的析构函数将不会被调用。
#include <iostream>
using namespace std;
class A
{
 public:
 A(){
  cout << "A construction" << endl;
  }
 virtual ~A()  //注意这里
  {
  cout << "A destruction" << endl;
   }
};
class B: public A{
public:
 B(){
  cout << "B construction" << endl;
 }
 ~B(){
  cout << "B destruction" << endl;
 }
};
void main(){
 {
  B pg;
 }
 cout << "---------------------------" << endl;
 {
  A *pe = new B( );
  delete pe;
 }
 
}

程序运行结果:
A construction
B construction
B destruction
A destruction
---------------------------
A construction
B construction
B destruction
A destruction
如果去掉 virtual 结果为:
A construction
B construction
B destruction
A destruction
---------------------------
A construction
B construction
A destruction
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息