SD-PImpl模式

0.目录

  1. 简介
  2. 实现
  3. 优劣
  4. 引用

1.简介

PIMPL(Private Implementation 或 Pointer to Implementation),是C++ 在构建导出库接口时特有的技术手段。 将类Class中所有私有变量以及私有方法,封装在一单独的实现类ClassImpl中。在Class中通过一指向ClassImpl的私有指针,访问这些私有数据。ClassImpl类的具体定义和实现放入cpp中。“编译防火墙”的作用。

2.实现

class widget
{
    // 公开成员
private:
    struct impl;  // 实现类的前置声明
    // 一种实现示例:见下文中的其他设计选项和权衡
    std::experimental::propagate_const< // 转发 const 的指针包装器
        std::unique_ptr<                // 唯一所有权的不透明指针
            impl>> pImpl;               // 指向前置声明的实现类
};

// widget.cpp(实现)
struct widget::impl
{
   // 实现细节
};

3.优劣

优点:

  • 使得程序接口有着稳定的ABI(应用程序二进制接口),即不会打破二进制兼容。
  • 降低了程序编译依赖,从而缩短编译时间。
  • 数据隐藏,使得头文件很干净,不包含实现细节,可以直接作为 API 参考。
  • 降低模块的耦合
  • 接口与实现分离,提高接口的稳定性

缺点:

  • 实现者需要做更多工作。
  • 由于子类需要访问,此机制对protected方法不奏效。
  • 由于数据的隐藏,多少造成了代码可读性下降。
  • 运行时性能被轻微的连累,尤其调用的函数为虚函数时。

4.引用

  • PImpl
  • Pimpl Idiom
  • D-Pointer
  • C++之PIMPL模式

你可能感兴趣的:(SD-PImpl模式)