博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Effective C++ 条款26
阅读量:4542 次
发布时间:2019-06-08

本文共 997 字,大约阅读时间需要 3 分钟。

尽可能延后变量定义式的出现时间

我们知道定义一个对象的时候有一个不争的事实,那就是分配内存。假设是我们自己定义的对象。程序运行过程中会调用类的构造函数和析构函数。

我们打个例如,假设天下雨了,你带把雨伞肯定是值得的。

但是,假设你带伞了,今天却没下雨,你是不是感觉自己亏了?的确,亏在了带了却没用,所以伞就变成了累赘。

本节的关键就在于此,假设你定义一个变量或者对象没有被使用,那么就是不完美的代码。

我们看一个代码片段:

std::string encryptPassword(const std::string& psaaword){    using namespace std;    string encrypted;    if(password.length()

假设,抛出异常,上面的变量encrypted就没有被使用,虽未被使用,但是却要承受一次构造和一次析构的行为。

改进例如以下:

std::string encryptPassword(const std::string& psaaword) { using namespace std;    if(password.length()

改进的代码跳过了异常。保证定义的encrypted一定被使用。但是我们知道假设可以调用copy构造函数,就没有必要调用default构造函数+赋值运算符函数。由于前者更高效。

我们继续改进代码:

std::string encryptPassword(const std::string& psaaword)    {        using namespace std;        if(password.length()

那么我们在循环中怎么贯彻这样的思想呢?

对照一下代码:

Widget w;//定义在循环外for(int i=0;i < n;++i)    w=……;    ……}for(int i=0;i

第一个调用了1个构造函数+1个析构函数+n个赋值操作。第二个调用了n个构造函数+n个析构函数。我们此时须要斟酌一下是赋值操作的效率高还是构造+析构的效率高。其实,假设两方差距不大。最好选用后者,由于后者对象的作用域更小,可维护性和可理解性更强。更安全。

转载于:https://www.cnblogs.com/wzzkaifa/p/7308018.html

你可能感兴趣的文章
java IO笔记(DataInput/DataOutput)
查看>>
Day8:String
查看>>
SQL语法之初级增删改查
查看>>
[转] Python基本学习资源收集汇总
查看>>
敏捷冲刺集合帖
查看>>
HTML5之Canvas
查看>>
团队作业8——第二次项目冲刺(Beta阶段)5.27
查看>>
彻底理解this指向
查看>>
hdu 3468(二分匹配)
查看>>
抑郁症的自我测试
查看>>
计算机编程以及基础原理
查看>>
关于多选框的问题
查看>>
使用.NET Reflector
查看>>
【剑指offer】40、最小的K个数
查看>>
JAVA生成RSA非对称型加密的公钥和私钥(利用JAVA API)
查看>>
mybatis + log4j 打印mybatis的sql
查看>>
解决Visual Studio:"无法导入以下密钥文件: xxxx.pfx,该密钥文件可能受密码保护"
查看>>
POJ1061-青蛙的约会---扩展欧几里德算法求最小整数解
查看>>
[RxJS] Conclusion: when to use Subjects
查看>>
10.18
查看>>