《effective C++》:条款07——为多态基类声明virtual析构函数

时间:2023-12-09 20:30:25

在继承中,基类的析构函数需要定义为虚析构函数数否则:

(1)当派生类对象经由一个base类指针删除时,而这个base类的析构函数不是虚函数时,其结果是未定义的。

(2)这样做会导致derived类部分的成员没有被销毁,即造成局部销毁的对象。

(3)从而造成资源泄漏,败坏之数据结构,在调试器上浪费去多时间。

记住:

(1)带多态性质的base class 应该声明一个virtual析构函数,如果base class带有任何的虚函数,那么应该声明虚析构函数。

(2)一般析构函数的调用是。最深层次的析构函数被调用,然后编译器会沿着继承的反方向,在子类的析构函数中调用父类的

析构函数

当base class 不是作为基类派生来用时,就最好不要讲析构函数设置为虚函数吗,例如string 各种容器。

(1)首先欲实现虚函数,对象必须包含某些信息,即vptr,指向虚函数表的指针。会加大对象内存

(2)不方便程序的移植。(例如移植到C语言实现的平台上)。