条款7:为多态基类声明virtual析构函数

1.将析构函数声明为virtual
当我们的类要作为基类的时候我们最好将其析构函数声明为virtual类型,因为当我们用基类的指针指向一个派生类,当我们要用基类指针析构掉这个派生类的时候,如果基类的析构函数不是virtual,那么最终只有基类里面声明的变量被析构掉,而派生类里面的变量很可能没被析构掉,这会导致内存泄漏问题。当我们将基类设置为virtual的时候我们利用基类指针进行析构时,基类析构函数会被先调用,然后调用派生类的析构函数。这样能保证所有的变量被析构掉。
2.将基类的函数实现声明为virtual
当我们在派生类重写了一个基类的函数时,我们最好将基类的该函数声明为virtual,因为这样当我们用基类指针指向该派生类时,我们能够区分到底是调用基类的该函数还是派生类里面的该函数,是因为,当我们将该函数声明为virtual的时候,我们的类中将被分配一个vptr函数指针,指向每个基类和派生类中该被重写函数,然后我们根据基类指针指向的派生类调用该派生类的重写函数。

3.将析构函数不是virtual的类作为基类进行派生是不明智的。
我们要将一个类作为基类,一般会构造一个全虚函数,这样颇为遍便利。

class AWOV{
public:
virtual ~AWOV()=0;//声明pure virtual 析构函数。
}

如果不是为了多态用途和作为base class就不要声明virtual。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值