Effective c++ 条款26:尽可能延后变量定义式的出现时间

只要你定义了一个变量而其类型带有一个构造函数或析构函数,那么当程序的控制流到达这个变量定义式时,你便得承受构造成本;当这个变量离开其作用域时,你得承受其析构成本。即使这个变量最终未被使用,仍需要耗费这些成本。

1、尽可能延后变量定义式

例如,当某个变量声明的代码出于一个可能抛出异常的代码段之前,若出现异常,这个变量就未被使用。因此需要将这个变量的定义延后,直到确实需要它。

2、跳过毫无意义的default构造过程,给对象一个初值

你不止应该延后变量的定义,直到非得使用该变量的前一刻为止,甚至应该尝试延后这份定义直到能够给它初值实参为止。如果这样,不仅能够避免构造和析构非必要对象,还可以避免无意义的default构造行为。

3、如果变量只在循环内使用,把它定义于循环内

将变量定义于循环外,通常需要1个构造函数+1个析构函数+n个赋值操作,而将变量定义于循环内,通常需要n个构造函数+n个析构函数。如果classes的一个赋值成本低于一组构造+析构成本,前者大体而言比较高效,尤其当n值很大时,否则应该选择后者,有时那对程序的可理解性和易维护性造成冲突。

猜你喜欢

转载自blog.csdn.net/unirrrrr/article/details/81321594