标签:
条款7:为多态基类声明虚析构函数
1、一个基类指针接受一个派生类对象的地址时,对该指针delete,仅仅释放基类部分
2、给所有类都带上虚析构函数是个馊主意,会带有vptr指向一个函数指针数组,扩大不必要的对象大小,除非补偿vptr,否则没有移植性。
3、string类和STL不含有虚析构函数,然而一些用户 却将他们作为基类,运用 delete指向派生类的基类指针,导致错误【c++11添加了禁止派生性质】,他们不适合当基类。
4,手头上没有合适的纯虚函数,但你确实需要一个抽象类,把析构函数声明为纯虚函数也不错,包含虚析构的问题,但你切记要给他一个定义,因为析构派生类时会用到它。
5、虚析构的设计目的是为了通过基类接口来处理派生类对象
6、有些类是为了做基类但是不是用来支持多态的。
7、带多态性质的类或有虚函数的类要带有虚析构函数,不是为了多态的类别有虚析构函数。
条款8:别让异常逃离析构函数【回顾异常】
1、不要让虚构函数抛出异常,析构函数要捕捉任何异常,吞下或者结束程序。
2、如果客户需要对某个操作期间抛出的异常做出反应,那么clss应该提供一个普通函数(而非在析构函数中)执行该操作
3、用于资源管理的类,设置一个资源管理类以管理的对象为成员,提供管理对象的函数在新类中。
条款9:绝不在构造和析构函数中调用virtual函数【回顾】
1、总而言之不要再析构函数和构造函数中使用虚函数,因为对象所在的层次和调用的层次其实不一样。
2、用一个static函数调用形参来基类传递数据。
标签:
原文地址:http://www.cnblogs.com/7-29/p/5721274.html