条款07:为多态基类声明vitual析构函数
? ? 当一个类作为派生类的基类的身份出现的时候,我们应该将她的析构函数设为虚函数。
class base{ public: int a; vitual ~base(); }
? ? 如果没有将基类的析构函数设为虚函数,用基类指针删除一个派生类的对象的时候就会造成派生类派生出的部分没有删除,从而造成内存泄漏!
?
? ??STL容器都不带virtual析构函数,所以最好别派生它们。
? ??
? ? 如果一个类不作为一个base class出现,那么就不需要将其的析构函数设为虚函数。因为虚函数产生的虚表指针会占用一定的空间(32位机上是4字节,64位机上是8字节)。许多人的心得是,如果一个class内包含至少一个虚函数,才为其声明vitual析构函数。
? ? ?
?? 如果我们希望一个类成为一个抽象类(不能被实体化的类),但是有时我们会难以找到一个纯虚函数,这时候我们就可以将这个类的析构函数定义为纯虚函数。要注意一点,我们必须为这个纯虚函数提供一个定义,因为子类的析构函数被调用之前会先调用其各个父类的析构函数。
? ??
class ca{ public: int a; virtual ~ca() = 0; }; ca::~ca() {}
?
原文:http://bbezxcy.iteye.com/blog/2241173