条款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析构函数
构造函数的顺序从上到下。析构顺序是从下到上。
阅读(470) | 评论(0) | 转发(0) |