主要讲了,
1. virtual析构函数的作用与调用顺序
2. 使用时机,并不是使用了继承就要把基类的析构函数变为虚函数(virtual),只有当用于多态目的时才进行一个virtual析构函数的定义。
3. 不要继承那些没有将析构函数定义为virtual的类来实现多态行为
对于1:
有些类继承可能只是一个组合的作用,这样加入virtual析构函数就会使得类实例的空间占用增加(一个vptr)
对于2:
如果继承确实是为了实现多态效果,那么最好定义一个virtual析构函数(自己认为,当不涉及到资源释放,其实也没必要进行定义,但是防范未然,因为已经使用了多态,那么vptr的存在就必不可少了,加入一个virtual析构函数并不会再引起类实例数据存放上的巨大变动)
对于3:
特别注意STL中的许多容器都要去继承他们来实现多态,可能导致自己扩展的部分资源未被释放(因为仅仅会调用基类的析构函数,而它恰恰不是virtual函数)
时间: 2024-10-11 01:20:45