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

C++中确定基类有虚析构函数,第1张

C++中确定基类有虚析构函数,第2张

有时,一个类想要跟踪它有多少个对象。一个简单的方法是创建一个静态类成员来计算对象的数量。该成员初始化为0,构造函数加1,析构函数减1。(第m26条解释了如何封装这个方法,以便可以很容易地将它添加到任何类中,并且“我的关于计数对象的文章”提供了这项技术的一些其他改进)

想象一下,在一个军事应用程序中,有一个表示敌方目标的类:

class enemy target {
public:
enemy target(){ ++ num targets;}
enemy target(const enemy target &){ ++ num targets;}
~ enemy target(){-num targets;}

static size _ t number of targets()
{ return num targets;}

虚拟bool destroy();//销毁enemytarget对象
//返回成功。

private:
static size _ t numtargets;//对象计数器
};

//类的静态成员应该在类外部定义;
//默认初始化为0
size _ tenemy target::num targets;

这个班不会给你赢得政府国防合同。和国防部的要求差的很远,但是足以满足我们这里讲解的需要。

敌人的坦克是一种特殊的enemytarget,所以很自然的会把它抽象成一个通过公共继承从enemytarget派生出来的类(见35条款和m33)。因为我们不仅要关心敌人目标的总数,还要关心敌人坦克的总数,所以和基类一样,在派生类中也采用了上面提到的同样的技术:

class enemy tank:public enemy target {
public:
enemy tank(){ ++ numtanks;}

enemy tank(const enemy tank & RHS)
:enemy target(RHS)
{ ++ numtanks;}

~ enemy tank(){-numtanks;}

static size _ t numoftanks()
{ return numtanks;}

虚拟bool destroy();

private:
static size _ t numtanks;//坦克对象计数器
};

(写完上面两个类的代码,你就可以更好的理解m26条款对这个问题的一般解决方案了。)

最后,假设程序中的某个地方用new动态创建了一个enemytank对象,然后用delete删除它:

enemy target * target ptr = new enemy tank;

...

删除targetptr

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » C++中确定基类有虚析构函数

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情