c++ 虚析构函数

来源:互联网 发布:ubuntu 开机自启动脚本 编辑:程序博客网 时间:2024/06/18 10:15
class Base1 {public:Base1() { cout << "Base1::Base1 1"<<endl; };Base1(int i, int j) :i(i), j(j) {cout << "Base1::Base1 2"<<endl ;};  ~Base1() {cout << "Base1::~Base1"<<endl;}void basemem() { cout << i <<","<< j<<endl; };protected:int i;private:int j;};struct public_derived : public Base1{public:public_derived() { cout << "public_derived::public_derived 1" << endl; };public_derived(int i, int j, int k) : Base1(i, j), k(k) { cout << "public_derived::public_derived 2" << endl; };int use_base() { return i; }~public_derived() { cout << "public_derived::~public_derived" << endl; };protected:int k;};


public_derived d2(5,7,8);

直接定义对象,在超出对象的范围时,会先自动调用派生类的析构函数再调用基类的析构函数;

若基类析构函数不是虚函数,则当基类指针或引用指向动态生成的派生类对象,并通过该指针delete该对象时,派生类的析构函数并不会执行,为了派生类析构函数执行,基类的析构函数需要声明为虚函数;

Base1 *bp;
bp = new public_derived(5, 7, 8);
delete bp;

0 0
原创粉丝点击