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

本文探讨了在代码设计中如何通过优化变量构造与析构来提高程序效率,包括延迟变量定义、改进循环结构等策略,并对比了不同构造方式的成本。

引言

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

第一节 延后实现

考虑有以下的代码:

 1 void encrypt(string& s);
 2 string encryptPassword(const sting& password) {
 3     string encrypted;
 4     if (xxxxx) {
 5          throw logic_error("xxxxxx");
 6     }  
 7     encrypted = password;
 8     encrypt(encrypted);
 9 
10     return encrypted;
11 }

在上述代码中,encrypted在被创建过后,如果抛出异常,那么就不会再使用。但是我们还得负担他的构造和析构成本。

我们可以考虑改成这样:

 1 void encrypt(string& s);
 2 string encryptPassword(const sting& password) {
 3     if (xxxxx) {
 4          throw logic_error("xxxxxx");
 5     }  
 6     string encrypted;
 7     encrypted = password;
 8     encrypt(encrypted);
 9 
10     return encrypted;
11 }

这样虽然很好的避免了上面的析构和构造问题,但是在第6行还是会调用string的默认的构造函数。

因此我们可以考虑再这样修改:

 1 void encrypt(string& s);
 2 string encryptPassword(const sting& password) {
 3     if (xxxxx) {
 4          throw logic_error("xxxxxx");
 5     }  
 6     string encrypted(password);  // 使用拷贝构造函数定义并初始化
 7     encrypt(encrypted);
 8 
 9     return encrypted;
10 }

可以避免无谓的默认构造行为。

第二节 循环

代码写的多了,都会出现下面这两种情况:

1.

1 Widget W;
2 for (int i = 0; i < n; i++) {
3     w = .....
4     .......
5 }

2.

1 for (int i = 0; i < n; i++) {
2     Widget w( .....);
3     .......
4 }

方法1:1个构造函数+1个析构函数+n个赋值操作

方法2:n个构造函数+n个析构函数

如果class的一个赋值成本低于一组构造+析构成本,那么做法A比较高效。否则B或许好些。

 

◆总结

1.尽可能延后变量定义式的出现。这样做可增加程序的清晰度并改善程序效率。

转载于:https://www.cnblogs.com/hustcser/p/4206253.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值