您的位置:首页 > 编程语言 > C语言/C++

[Effective C++ --026]尽可能延后变量定义式的出现时间

2015-01-06 15:44 387 查看
引言

每一次构造和析构都需要成本,因此我们在设计代码的时候,应该尽可能考虑到构造和析构的成本。

第一节 延后实现

考虑有以下的代码:

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.尽可能延后变量定义式的出现。这样做可增加程序的清晰度并改善程序效率。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: