析构函数的调用顺序

来源:互联网 发布:苏州鑫玛特软件怎么样 编辑:程序博客网 时间:2024/05/06 16:54

析构函数做最后的“清场工作”,

一般当派生类对象从内存中撤销时,先调用派生类的析构函数,再调用基类析构函数;

但,若用new建立了临时对象,在用delete撤销对象是,系统会只执行基类的析构函数,而不执行派生类的析构函数。

如果将基类的析构函数声明为虚函数,由基类所有派生类的析构函数自动成为虚函数(即使析构函数名不同)。

将析构函数加上vitual,实现具体对象的 动态关联 ,在运行阶段,先调用派生类析构,在调用基类析构

例子1:#include <stdio.h>
//using namespace std;
class A 

    public: 
    ~A(); 
}; 
A::~A() 

    printf("delete A "); 
}
class B : public A 

    public: 
    ~B(); 
}; 
B::~B() 

    printf("delete B "); 



int main()
{
   A *pa = new B();
delete pa; 
}

输出结果为delete A

例子2:


#include <iostream>
using namespace std;


class A{  
public:
virtual ~A()
{
cout<<"a"<<endl;
}
};


class B:public A
{
public:
virtual ~B()
{
cout<<"b"<<endl;
}
};
int main()
{
    A* p=new B;
    delete p;
}

结果为 b a

0 0
原创粉丝点击