Effective C++ 条款07
为多态基类声明virtual 析构函数。Declare destructors virtual in polymorphic base classes.
这一点很容易理解,当一个基类的析构函数不是virtual的时候,那么通过基类指针指向derived class进行操作,当执行delete 释放对象空间时,会导致基类的信息被释放,derived class 部分没有被释放。
所以,郑重声明,一个类中只要有virtual 函数,那么其析构函数必须是virtual。 这样保证在释放时不会出错。
相反,如果一个对象不打算被当作base class,但是如果给其声明一个virtual 析构函数,那么这不是个好主意。因为虚函数表会占用对象空间,这样会对跨语言编程造成障碍。
这里还有一点特别声明,基于以上总结,不要去继承string,STL容器对象,否则会造成你的class释放不了。