Item 26 推迟变量的定义

阅读更多

对于有ctor和dtor的变量,如果定义得过早,就有可能带来不必要的构造和析构,从而带来性能上的损失。

std::string encryptPassword(const std::string& password) { using namespace std; string encrypted; if (password.length() < MinimumPasswordLength) { throw logic_error("Password is too short"); } ... // do whatever is necessary to place an // encrypted version of password in encrypted return encrypted; }

如果中途出现异常而退出,则encrypted没有使用到,白白调用了ctor和dtor。改成下面这样就好多了,不会调用多余的ctor:

std::string encryptPassword(const std::string& password) { ... // check length std::string encrypted(password); // define and initialize // via copy constructor encodeString(encrypted); return encrypted; }

对于循环中的变量,考虑稍稍不一样:

Widget w; for (int i = 0; i < n; ++i) { for (int i = 0; i < n; ++i) { w = some value dependent on i; Widget w(some value dependent on i); ... ...

两个循环使用情况不一样:

1 ctor + 1 dtor + n assignments
n ctor + n dtor

要具体分析才能知道谁更有效率。

你可能感兴趣的:(Item 26 推迟变量的定义)