c++ 虚析构函数

本文探讨了C++中虚析构函数的重要性。当基类指针删除动态创建的派生类对象时,只有基类的析构函数被调用,除非基类的析构函数声明为虚函数。这样可以确保派生类的析构函数正确执行,避免内存泄漏问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值