Chinaunix首页 | 论坛 | 博客
  • 博客访问: 43921
  • 博文数量: 25
  • 博客积分: 930
  • 博客等级: 准尉
  • 技术积分: 257
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-25 08:59
文章分类

全部博文(25)

文章存档

2010年(6)

2009年(18)

2008年(1)

我的朋友
最近访客

分类: C/C++

2009-04-21 08:43:37

条款07:为多态基类声明virtual析构函数
 
C++指出,当derived class对象由一个base class指针删除,而base class带着一个non-virtual的析构函数,结果是未定的。但通常是base class的资源被释放了,但derived class 的资源没有被释放。解决办法给base class一个 virtual 析构函数.
 
不要把一个不做base class的类的析构函数声明为virtual.当类里面有virtual函数时就会产生virtual table,还有一些其他的影响,降低程序效率。
 
尽量不要把没有 virtual 析构的类作为base class。
标准string不含任何virtual函数,当然也没有virtual析构。
class SpecialString:public string  //继承一个没virtual析构的 base class类
{ };
 
SpecialString * pss=new SpecialString("Be careful!");
string * ps;
ps=pss;
delete ps;
   //你实现了SpecialString的资源泄漏。因为SpecialString析构函数没有被调用。
 
Class的设计目的如果不是作为base class使用,或不是为了多态,就不该声明virtual析构函数
 
构造函数的顺序从上到下。析构顺序是从下到上。
阅读(440) | 评论(0) | 转发(0) |
0

上一篇:Effective C++ 笔记6.1

下一篇:Effective C++ 9.1

给主人留下些什么吧!~~