标签:
条款26:尽可能延后变量定义式的时间
1、中途抛出异常浪费构造函数
2、在循环内定义变量,消耗n个构造函数,n个析构函数;在循环外定义变量消耗n个赋值函数,1个构造,一个析构;
除非赋值的消耗比构造和析构少的不少,或者你处理的代码效率高度敏感,还是在循环内定义变量吧。
条款27:尽量少做转型动作
1、const_cast-----脱离常量属性,static_cast(隐式转换显示化),dynamic_cast(从一个寄放派生类的基类指针或引用调用派生类的成分),reinterpret_cats低级转换
2、static_cast<window>(*this).onReise()函数你可能以为他调用了对象基类的函数,实际上它调用的是对象基类副本的函数。应该用访问限定符来代替。
3、要从一个寄放派生类的基类指针或引用调用派生类的成分,你可能能设置一个容器存放一堆(基类的)智能指针的数组用来指向他们派生类的实际对象,然后调用dynamic_cast来访问实际对象的成分
代替方法1、设置多个直接指向不同(派生类的)的智能指针来指向你可能要用到的多种深度的派生类对象【空间变大】
代替方法2、运用在基类设置一个空的虚函数,【有时可能不是很好】
4、如果可以尽量不要使用转型,特别是在注重效率的代码中避免dynamic_cast,如果设计需要转型,试着向无需转型的方向转换
5、如果转型是必要的,试着将他隐藏于某个函数身后。客户随后可以调用这个函数,而不需将转型放置入他们的代码内。
6、使用c++新式转型,不要用旧式,新的分类清除。
标签:
原文地址:http://www.cnblogs.com/7-29/p/5725723.html