5.6 句柄类

C++中的访问控制允许将实现部分与接口部分分开,但实现部分的隐藏是不完全的。编译器仍然必须知道一个对象的所有部分的声明,以便正确地创建和管理它。可以想象一种只需声明一个对象的公共接口部分的编程语言,它将私有的实现部分隐藏起来。但C++要尽可能多地在编译期间作静态类型检查。这意味着尽早捕获错误,也意味着程序具有更高的效率。然而包含私有实现部分会带来两个影响:一是即使客户程序员不能轻易地访问私有实现部分,但可以看到它;二是造成一些不必要的重复编译。

5.6.1 隐藏实现

有些项目不可让最终客户程序员看到其实现部分。例如可能在一个库的头文件中显示一些策略信息,但公司不想让这些信息被竞争对手获得。我们可能在从事一个安全性很重要的系统—比如一个加密算法—我们不想在文件中暴露任何线索,以防有人破译代码。或许我们把库放在了一个“有敌意”的环境中,在那里程序员会不顾一切地用指针和类型转换来访问我们的私有成员。在所有这些情况下,就有必要把一个编译好的实际结构放在实现文件中,而不是让其暴露在头文件中。