C++中,使用handle classes(句柄类)的目的,是为了降低文件之间的编译依存关系。
摘自网上的一段话:
需要句柄类的背景:
1)在对安全要求很高的领域,即使核心实现已经封闭在库中不可见,但头文件中变量定义仍可能曝露一些内部信息
C
2)在设计初期、实现部分会经常变动,甚至头文件中变量定义也需要经常变动,因此在重编译的时候头文件也需要编译,有时候导致编译时间过长。 句柄类就是为了解决这类问题
比如,我有一个类Person,在很多地方都用到了这个类(#incude Person.h),在程序不断完善的过程中,难免会对该类进行重新设计或者一些修改。当Person.h被很多文件包含时,即使我们只是对Person类做了很小的改动,那么所有包含该头文件的文件,都需要重新编译,这会花费大量的无谓的时间,我想这是每一个编程人员都不希望看到的,为了解决此类问题的发生,我们便想到了句柄类。
设计思想:
我们把Person类设计成一个 handle class (句柄类),而重新定义一个新类 PersonImpl,作为具体的实现类,当然原本Person类中的成员变量,和成员函数的具体实现都放在PersonImpl类中。在Person类中定义一个指向PersonImpl类的指针,用于调用具体的实现。这样一来,当实现修改了,我们只需要重新编译Person文件即可。