虚析构函数的作用

        今天看书《深度探索c++ 对象模型》,里边有一句话"virtual function的导入应该总是附带着一个virtual destructor的声明",有点不解,查了一下资料,终于明白,写下心得

为什么虚函数要伴随着一个虚析构函数呢,很明显首先是和虚函数有关,虚函数是为了实现多态的,也就是基类指针或者引用可以指向子类对象,然后调用虚函数,程序就会根据执行期的实际的类型来选择相应的版本的虚函数,这就是多态,

        那么好了,既然是父类的指针来指向子类的对象,如果对象要析构,肯定是整个对象都释放内存的,如果析构函数不是虚函数,执行的时候肯定是选择父类的版本,那么仅仅是释放了父类的子对象,而没有释放子类自己独有的那一份,这下就出问题了,

        因此,出现基类有虚函数的时候,一定要把析构函数也要设成虚函数,这样的话,子类重写虚析构函数,释放自己独有的那一份数据,调用析构函数的时候,顺序和构造函数相反,先执行子类的析构函授,后执行父类的析构函数,这样确保所有的内存都释放掉


后记:析构函数最好不要设成纯虚, 因为纯虚函数意味着只要声明,而不需要定义,那么如果有个子类B来继承类A,A 的析构函数 设为纯虚函数  ~A() = 0;那么,B的析构函数必须要去调用A的析构函数,可是这个析构函数没定义,那就肯定出错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值