Item 4: 确定一个对象在使用前已经被初始化 C++ 看上去在对象的初始化方面变化无常。例如,如果你这样做, int x; 在某些情形下,x 会被初始化(0),但是在其它情形下,也可能没有。如果你
Item 4: 确定一个对象在使用前已经被初始化 C++ 看上去在对象的初始化方面变化无常。例如,如果你这样做, int x; 在某些情形下,x 会被初始化(0),但是在其它情形下,也可能没有。如果你
Item 21: 当你必须返回一个对象时不要试图返回一个引用 一旦程序员抓住对象传值的效率隐忧(参见 Item 20),很多人就会成为狂热的圣战分子,誓要根除传值的罪恶,无论它隐藏多深。他们不屈不挠地
(接上篇) 但是也许你注意到无论是在栈上的还是在堆上的方法,为了从 operator* 返回的每一个 result,我们都不得不容忍一次构造函数的调用。也许你想起我们最初的目标是避免这样的构造函数调用
Item 12: 拷贝一个对象的所有组成部分 在设计良好的面向对象系统中,为了压缩其对象内部的空间,仅留两个函数用于对象的拷贝:一般称为拷贝构造函数(copy constructor)和拷贝赋值运算符
第四章 设计和声明软件设计——使软件做你想让它做的事情的途径——典型地从相当概括的主意开始,但它们最后成为足够详细的允许开发的详细的接口。这些接口必须能
第五章 实现 在极大程度上,为你的类(包括类模板)和函数(包括函数模板)提供正确的定义是战斗的关键性部分。一旦你得到正确的结果,相应的实现很大程度上就是直截了当的。但是仍然有一些注意事项需要当心。过早
Item 25: 考虑支持不抛异常的 swap swap 是一个有趣的函数。最早作为 STL 的一部分被引入,后来它成为异常安全编程(exception-safe programming)的支柱(参见
Item 22: 将数据成员声明为 private 好了,先公布一下计划。首先,我们将看看为什么数据成员不应该声明为 public。然后,我们将看到所有反对 public 数据成员的理由同样适用于 p
Item 15: 在资源管理类中准备访问裸资源(raw resources) 资源管理类真是太棒了。他们是你防御资源泄漏的防波堤,没有这样的泄漏是设计良好的系统的基本特征。在一个完美的世界中,你可以在