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

本文共 945 字,大约阅读时间需要 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个析构函数。我们此时须要斟酌一下是赋值操作的效率高还是构造+析构的效率高。其实,假设两方差距不大。最好选用后者,由于后者对象的作用域更小,可维护性和可理解性更强。更安全。

转载地址:http://avwfo.baihongyu.com/

你可能感兴趣的文章
贵阳高新区力争打造“千亿级大数据园区”
查看>>
安防众筹不止于卖产品 思维拓展刺激消费
查看>>
OpenSSH曝高危漏洞 会泄露私钥
查看>>
艾特网能获2016APCA用户满意品牌大奖
查看>>
《CCNP TSHOOT 300-135学习指南》——第2章 结构化故障检测与排除进程
查看>>
《Java EE 7精粹》—— 2.5 非阻塞I/O
查看>>
《Python数据科学实践指南》一2.2 字符串
查看>>
《R数据可视化手册》——1.1 安装包
查看>>
《iOS创意程序设计家》——导读
查看>>
spring-aop
查看>>
android RecycleView Adapter简单封装
查看>>
PgSQL · 案例分享 · 递归收敛优化
查看>>
Dart的数据库操作
查看>>
Codeforces 591 B Rebranding【Codeforces Round #327 (Div. 2)】
查看>>
命名难,难于上青天
查看>>
做完和做好不一样
查看>>
APUE读书笔记-05标准输入输出库(7)
查看>>
23 第一周作业
查看>>
DNS解析偶尔延迟
查看>>
iOS打电话,发短信,发邮件,打开网址
查看>>