您的位置:首页 > 编程语言 > C语言/C++

c++ 虚析构函数

2016-07-05 22:47 417 查看
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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: