在《超越c++标准库-boost程序库导论》中有这么一段话中有这么一段话:
scoped_ptr 和 Pimpl 用法scoped_ptr 可以很好地用于许多以前使用裸指针或 auto_ptr 的地方,如在实现 pimpl 用法时。 [4]pimpl 用法背后的思想是把客户与所有关于类的私有部分的知识隔离开。由于客户是依赖于类 的头文件的,头文件中的任何变化都会影响客户,即使仅是对私有节或保护节 的修改。pimpl 用 法隐藏了这些细节,方法是将私有数据和函数放入一个单独的类中,并保存在一个实现文件中, 然后在头文件中对这个类进行前向声明并保存 一个指向该实现类的指针。类的构造函数分配这个 pimpl 类,而析构函数则释放它。这样可以消除头文件与实现细节的相关性。我们来构造一个实 现 pimpl 用法的类,然后用智能指针让它更安全些。
PImpl 这也被称为 Cheshire Cat 用法. 关于 pimpl 用法更多的说明请见 www.gotw.ca/gotw/024.htm 和 Exceptional C++ 。
PIMPL ,即Private Implementation,一般称之为类的私有化实现,PImpl主要有两个作用;
-
(1)它让声明和实现进行解耦,在项目开发时,如果很多文件引用了该头文件,如果头文件改变了一些实现,那么在编译时,所有引用的文件也得重新编译一次,增加了c++程序的编译时间, 如果把实现用一个指针进行声明,改变实现的代