基础:

1.区别指针和引用

经验:1.如果指向可以改变,则用指针,否则引用。2.引用必须有初值。3.在引用和指针作为返回值的选择时,一般选择引用。

2.显式使用c++转型操作符(static_cast,dynamic_cast,const_cast,reinterpret_cast)

经验:增加了可阅读性。

static:与旧式转型类似

dynamic:使用在继承条件下的父类指针向子类对象的转型。

const:将对象的常量属性去掉。

reinterpret:转换函数指针(返回值)类型。

3.不能用数组的方式来使用多态

理由:1.当以父类数组指针来实现多态时,父类对象与子类对象大小不同,所以用父类指针多态调用子类数组时,肯定会造成访问子类对象指针不正确。2.用父类数组多态删除也会造成结果未定义。

4.

 

 

异常:

9.根据异常的栈展开原理,防止在调用destructors资源泄露

理由:一旦抛出异常,就会调用局部变量的析构函数,而当局部变量是指针类型时,就要用资源管理类(或者类类型)来防止指针锁指向的目标资源泄露。

经验:把资源封锁在对象内,就能防止资源泄露。

10.怎么处理构造函数内的new操作符可能导致的异常

理由:构造函数中的new发生的异常并不会调用该类型的析构函数,因为该类型还未成为对象,所以该类型中的在抛出异常之前建立的指针类型就会导致资源泄露。

经验:用资源管理类来防止资源泄露。

11.不让异常流出destructor

理由:异常抛出会调用析构函数,如果析构函数可能抛出异常,则出现连续两个异常的可能,如果连续两个异常,程序直接出发terminate。

经验:在构造函数以内,捕捉并处理所有可能产生的异常。

 

 

19.避免产生临时对象

什么是临时对象:不可见的,不会再源代码中出现,但是会产生的对象。

临时对象产生条件:1.隐式类型转换和reference to const 2.函数返回对象

经验:根据临时对象产生的条件,尽量避免临时对象的产生,以提高程序的执行效率。

20.返回值优化(return value optimization)来降低临时对象产生的成本

经验:用构造函数的形式来取代返回对象。这样可以消除放回临时对象的成本。

21.利用重载消除临时对象产生的成本

经验:利用参数类型重载,来防止传递引用参数时,不同类型产生的临时对象。

22.复合形式操作符(+=)取代独身形式操作符(+)爱消除临时对象的成本

经验:复合操作符(+=)不产生临时对象,独身操作符(=)容易产生临时对象。

23.针对不同需求使用不同程序库

24.虚函数、多继承、RTTI的代价

虚函数:多出空间用来存放虚表和虚指针

多继承:多空间来存放指针

RTTI:多空间来存放类型信息

技巧篇

25.虚拟构造函数、虚拟拷贝构造函数、虚拟非成员函数的实现技巧

虚拟拷贝构造函数技巧:利用较为宽松的虚函数返回值规则,派生类重写基类虚函数的返回值不必与基类的虚函数返回值一致。所以声明一个函数,内部调用拷贝构造函数同时重写返回值类型,就达到了虚拟构造函数的目的。

虚拟非成员函数技巧:将实现虚函数的对象作为参数传入非成员函数中,就实现了非成员函数虚拟化。

 

posted on 2018-04-07 20:13  Grant-Zhang  阅读(112)  评论(0)    收藏  举报