博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
条款25 :尽可能延后变量定义式的出现时间
阅读量:5068 次
发布时间:2019-06-12

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

只要你定义了一个变量,而类型带有一个构造函数和一个析构函数,你就得忍受构造成本与析构成本。或许你认为你不可能定义一个不会使用的变量,但是请看下面的代码:

std::stringencryptPassword(conststd::string&password){

    usingnamespacestd;

    stringencrypted;

    if(password.length()<MinimumPasswordLength){

           throwlogic_error("password is short");

    }

    ...

    returnencrypted;

}

对象encrypted并非完全没有被使用,但是当抛出异常时,这个对象确实没有被使用,但是你仍旧要忍受起encrypted对象的构造,析构成本。最好的方法是延后encrypted对象的定义式,直到确实需要它时。

std::stringencryptPassword(conststd::string&password){

    usingnamespacestd;

    if(password.length()<MinimumPasswordLength){

           throwlogic_error("password is short");

    }

    stringencrypted; //延后encrypted对象的定义式

    ...

    returnencrypted;

}

假设encryptPassword函数最艰难的部分在以下这个函数中进行:

voidencrypt(std::string&s);

       则我们的encryptPassword函数可以这样实现:

std::stringencryptPassword(conststd::string&password){

    usingnamespacestd;

    ...// 检查length,如前

    stringencrypted;

    encrypted=password;

    encrypt(encrypted)    

    returnencrypted;

}

       我们还可以接着去改进:我们知道上例中的encrypted是先定义,并调用了默认的构造函数,再用password进行赋值。这样,效率是比较低的,我们完全可以直接初始化。

       std::stringencryptPassword(conststd::string&password){

       usingnamespacestd;

       ...//

       stringencrypted(password);   

       encrypt(encrypted)    

       returnencrypted;

}

 

在这里我们再次讨论“尽可能延后”的真正意义。你不只应该延后变量的定义,直到非得使用该变量前一刻为止,而是应该尝试延后这份定义直到能够给它初值实参为止。

转载于:https://www.cnblogs.com/loveyakamoz/archive/2012/11/15/2772415.html

你可能感兴趣的文章
配置链路聚合中极小错误——失之毫厘谬以千里
查看>>
蓝桥杯-分小组-java
查看>>
Android Toast
查看>>
iOS开发UI篇—Quartz2D使用(绘制基本图形)
查看>>
docker固定IP地址重启不变
查看>>
桌面图标修复||桌面图标不正常
查看>>
JavaScript基础(四)关于对象及JSON
查看>>
JAVA面试常见问题之Redis篇
查看>>
jdk1.8 api 下载
查看>>
getElement的几中属性介绍
查看>>
HTML列表,表格与媒体元素
查看>>
雨林木风 GHOST_XP SP3 快速装机版YN12.08
查看>>
java对象的深浅克隆
查看>>
数据结构3——浅谈zkw线段树
查看>>
Introduction to my galaxy engine 2: Depth of field
查看>>
Python 3.X 练习集100题 05
查看>>
设计器 和后台代码的转换 快捷键
查看>>
Monkey测试结果分析
查看>>
STL——配接器、常用算法使用
查看>>
STL容器之vector
查看>>