Item 23: 用非成员非友元函数取代成员函数 想象一个象征 web 浏览器的类。在大量的函数中,这样一个类也许会提供清空已下载成分的缓存。清空已访问 URLs 的历史,以及从系统移除所有 cook
Item 14: 谨慎考虑资源管理类的拷贝行为 Item 13 介绍了作为资源管理类支柱的 Resource Acquisition Is Initialization (RAII) 原则,并描述了
第三章 资源管理资源是这样一些东西:一旦你不再使用它,你需要把它还给系统。如果你不这样做,有百害而无一利。在 C++ 程序中,最普遍使用的资源是动态分配的内存(dynamically allocate
第一章 使自己习惯于 C++无论你的编程背景如何,对于 C++ 可能多少有些不习惯。这是一个有着极其丰富特性的威力强大的语言。但是在你能发挥它的威力并有效地使用这些特性之前,你必须使自己习惯于以 C+
Item 22: 将数据成员声明为 private 好了,先公布一下计划。首先,我们将看看为什么数据成员不应该声明为 public。然后,我们将看到所有反对 public 数据成员的理由同样适用于 p
Item 9: 绝不要在构造或析构期间调用虚函数 我要开始翻新轮胎:你不应该在构造或析构期间调用虚函数,因为这样的调用不会如你想象那样工作,而且它们做的事情保证会让你很郁闷。如果你转为 Java 或
Item 8: 防止因为异常而离开析构函数 C++ 并不禁止从析构函数中引发异常,但是这确实妨碍了实践。至于有什么好的理由,考虑: class Widget { public: ... ~Wi
Item 31: 最小化文件之间的编译依赖 作者: 译者: 你进入到你的程序中,并对一个类的实现进行了细微的改变。提醒你一下,不是类的接口,只是实现,仅仅是 private 的东西。然后你重建(reb
Item 28: 避免返回对象内部构件的“句柄” 假设你正在一个包含矩形的应用程序上工作。每一个矩形都可以用它的左上角和右下角表示出来。为了将一个 Rectangle 对象保持
第五章 实现 在极大程度上,为你的类(包括类模板)和函数(包括函数模板)提供正确的定义是战斗的关键性部分。一旦你得到正确的结果,相应的实现很大程度上就是直截了当的。但是仍然有一些注意事项需要当心。过早