c++中确定基类有虚析构函数

本文讨论了在C++中,当基类包含虚析构函数的必要性。通过一个敌人目标类和敌方坦克类的例子,解释了如果基类没有虚析构函数,删除派生类对象时可能导致的不可预测行为。强调了只有在类包含至少一个虚函数时才声明虚析构函数的原则,并提到了纯虚析构函数在创建抽象类时的作用。

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

有时,一个类想跟踪它有多少个对象存在。一个简单的方法是创建一个静态类成员来统计对象的个数。这个成员被初始化为0,在构造函数里加1,析构函数里减1。(条款m26里说明了如何把这种方法封装起来以便很容易地添加到任何类中,“my article on counting objects”提供了对这个技术的另外一些改进)

设想在一个军事应用程序里,有一个表示敌人目标的类:

class enemytarget {
public:
  enemytarget() { ++numtargets; }
  enemytarget(const enemytarget&) { ++numtargets; }
  ~enemytarget() { --numtargets; }

  static size_t numberoftargets()
  { return numtargets; }

  virtual bool destroy();       // 摧毁enemytarget对象后
                                // 返回成功

private:
  static size_t numtargets;     // 对象计数器
};

// 类的静态成员要在类外定义;
// 缺省初始化为0
size_t enemytarget::numtargets;

这个类不会为你赢得一份政府防御合同,它离国防部的要求相差太远了,但它足以满足我们这儿说明问题的需要。

敌人的坦克是一种特殊的敌人目标,所以会很自然地想到将它抽象为一个以公有继承方式从enemytarget派生出来的类(参见条款35及m33)。因为不但要关心敌人目标的总数,也要关心敌人坦克的总数,所以和基类一

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值