Effective C++ .07 virtual析构函数的提供

主要讲了,

1. virtual析构函数的作用与调用顺序

2. 使用时机,并不是使用了继承就要把基类的析构函数变为虚函数(virtual),只有当用于多态目的时才进行一个virtual析构函数的定义。

3. 不要继承那些没有将析构函数定义为virtual的类来实现多态行为 

对于1:

有些类继承可能只是一个组合的作用,这样加入virtual析构函数就会使得类实例的空间占用增加(一个vptr)

对于2:

如果继承确实是为了实现多态效果,那么最好定义一个virtual析构函数(自己认为,当不涉及到资源释放,其实也没必要进行定义,但是防范未然,因为已经使用了多态,那么vptr的存在就必不可少了,加入一个virtual析构函数并不会再引起类实例数据存放上的巨大变动)

对于3:

特别注意STL中的许多容器都要去继承他们来实现多态,可能导致自己扩展的部分资源未被释放(因为仅仅会调用基类的析构函数,而它恰恰不是virtual函数)

原文地址:https://www.cnblogs.com/lailailai/p/4176712.html