主要观点:
- 目前 C++类声明会暴露类的私有细节,改变类的私有实现细节会导致依赖该头文件的其他编译单元需要重新编译,信息泄露违反信息隐藏原则,而不透明指针模式可解决此问题。
- 不透明指针模式的基本思想是通过指向不完整类型的指针来隐藏实现细节,如以
Point
类为例,在头文件中只包含对实现类的前向声明和指针,在实现文件中定义实现类。 - 使用
std::unique_ptr
可避免手动内存管理问题,实现不透明指针模式,但需要在头文件中声明析构函数,在实现文件中定义析构函数。
关键信息:
- 给出了使用不透明指针模式的
Point
类示例,包括原始指针实现的问题及std::unique_ptr
实现的过程。 - 提到不透明指针模式的优点,如更好的信息隐藏、减少编译依赖;缺点,如实现和运行时开销。
- 推荐了进一步阅读的相关资料,如 Wikipedia 上的不透明指针介绍、Bartlomiej Filipek 的相关文章、Martin Reddy 的《API Design for C++》。
重要细节:
- 在原始指针实现中,直接在
Point
构造函数中分配Point::Impl
的内存但未释放,存在内存泄漏问题。 - 在使用
std::unique_ptr
时,编译器会因对不完整类型Point::Impl
进行操作而报错,需在头文件中声明析构函数,在实现文件中定义析构函数。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。