[Effective C++ --026]尽可能延后变量定义式的出现时间
2015-01-06 15:44
387 查看
引言
每一次构造和析构都需要成本,因此我们在设计代码的时候,应该尽可能考虑到构造和析构的成本。
第一节 延后实现
考虑有以下的代码:
在上述代码中,encrypted在被创建过后,如果抛出异常,那么就不会再使用。但是我们还得负担他的构造和析构成本。
我们可以考虑改成这样:
这样虽然很好的避免了上面的析构和构造问题,但是在第6行还是会调用string的默认的构造函数。
因此我们可以考虑再这样修改:
可以避免无谓的默认构造行为。
第二节 循环
代码写的多了,都会出现下面这两种情况:
1.
2.
方法1:1个构造函数+1个析构函数+n个赋值操作
方法2:n个构造函数+n个析构函数
如果class的一个赋值成本低于一组构造+析构成本,那么做法A比较高效。否则B或许好些。
◆总结
1.尽可能延后变量定义式的出现。这样做可增加程序的清晰度并改善程序效率。
每一次构造和析构都需要成本,因此我们在设计代码的时候,应该尽可能考虑到构造和析构的成本。
第一节 延后实现
考虑有以下的代码:
void encrypt(string& s); string encryptPassword(const sting& password) { string encrypted; if (xxxxx) { throw logic_error("xxxxxx"); } encrypted = password; encrypt(encrypted); return encrypted; }
在上述代码中,encrypted在被创建过后,如果抛出异常,那么就不会再使用。但是我们还得负担他的构造和析构成本。
我们可以考虑改成这样:
void encrypt(string& s); string encryptPassword(const sting& password) { if (xxxxx) { throw logic_error("xxxxxx"); } string encrypted; encrypted = password; encrypt(encrypted); return encrypted; }
这样虽然很好的避免了上面的析构和构造问题,但是在第6行还是会调用string的默认的构造函数。
因此我们可以考虑再这样修改:
void encrypt(string& s); string encryptPassword(const sting& password) { if (xxxxx) { throw logic_error("xxxxxx"); } string encrypted(password); // 使用拷贝构造函数定义并初始化 encrypt(encrypted); return encrypted; }
可以避免无谓的默认构造行为。
第二节 循环
代码写的多了,都会出现下面这两种情况:
1.
Widget W; for (int i = 0; i < n; i++) { w = ..... ....... }
2.
for (int i = 0; i < n; i++) { Widget w( .....); ....... }
方法1:1个构造函数+1个析构函数+n个赋值操作
方法2:n个构造函数+n个析构函数
如果class的一个赋值成本低于一组构造+析构成本,那么做法A比较高效。否则B或许好些。
◆总结
1.尽可能延后变量定义式的出现。这样做可增加程序的清晰度并改善程序效率。
相关文章推荐
- 《Effective C++》读书笔记之item26:尽可能延后变量定义式的出现时间
- Effective C++ -----条款26:尽可能延后变量定义式的出现时间
- effective C++ 条款 26:尽可能延后变量定义式的出现时间
- 《Effective C++》学习笔记条款26 尽可能延后变量定义式的出现时间
- Effective C++ 条款26 尽可能延后变量定义式的出现时间
- effective c++尽可能延后变量定义式的出现时间
- 《Effective C++》之条款26:尽可能延后变量定义式的出现时间
- Effective C++ 条款26:尽可能延后变量定义式的出现时间
- Effective C++:条款26:尽可能延后变量定义式的出现时间
- Effective C++:条款26:尽可能延后变量定义式的出现时间
- 尽可能延后变量定义式的出现时间(Effective_C++(26))
- 条款26:尽可能延后变量定义式的出现时间
- Effective C++读书笔记---尽可能延后变量定义式出现的时间
- 【Effection C++】读书笔记 条款26:尽可能延后变量定义式的出现时间
- 条款26:尽可能延后变量定义式的出现时间(Postpone variable definitions as long as possible)
- 条款26:尽可能延后变量定义式的出现时间
- 条款26 尽可能延后变量定义式的出现时间
- 读书笔记_Effective_C++_条款二十六:尽可能延后变量定义式的出现时间
- 条款26:尽可能延后变量定义式的出现时间
- 条款26:尽可能延后变量定义式的出现时间