知识卡片

Pimpl析构放实现

普通读书笔记卡 · 1417

内容

Pimpl 把实现细节移到不完整类型中,降低使用者的编译依赖。以 unique_ptr 持有实现对象时,在头文件声明所需特殊成员,在实现文件完整类型可见后定义,使删除器能正确实例化。shared_ptr 的完整类型要求不同,不能机械照搬。

参考来源

- 位置:《Effective Modern C++》第4章《智能指针》,条款二十二:当使用Pimpl惯用法,请在实现文件中定义特殊成员函数(源文件:_epub-src/EPUB/text/ch005.xhtml) - 结论依据:原文解释 Pimpl 降低编译依赖,并区分 unique_ptr 与 shared_ptr 的完整类型约束。 - 原始内容:Pimpl惯用法通过减少在类实现和类使用者之间的编译依赖来减少编译时间。 对于 std::unique_ptr 类型的 pImpl 指针,需要在头文件的类里声明特殊的成员函数,但是在实现文件里面来实现他们。即使是编译器自动生成的代码可以工作,也要这么做。 以上的建议只适用于 std::unique_ptr ,不适用于 std::shared_ptr 。