编译时封装(现代C++) Pimpl

pimpl 惯例 是隐藏实现,最小化耦合和分隔接口的一个现代 C++ 技术。 Pimpl 为“实现的指针较短”。您可能已经熟悉此概念,但由与彻斯特猫或编译器防火墙固有的其他名称识别它。

为什么使用 pimpl?

这是 pimpl 个可以如何提高软件开发在段:

  • 生成依赖项的低估。

  • 接口和实现的分离。

  • 可移植性。

Pimpl 标头

// my_class.h
class my_class {
   //  ... all public and protected stuff goes here ...
private:
   class impl; unique_ptr<impl> pimpl; // opaque type here
};

pimpl 个避免重新生成级联和脆弱的对象布局。 它 (管道) 的常见类型是非常适合的。

Pimpl 实现

定义在 .cpp 文件中 impl 选件类。

// my_class.cpp
class my_class::impl {  // defined privately here
  // ... all private data and functions: all of these
  //     can now change without recompiling callers ...
};
my_class::my_class(): pimpl( new impl )
{
  // ... set impl values ... 
}

最佳实践

是否考虑将为非引发支持交换专用化。

请参见

其他资源

返回C++ (现代C++)的欢迎

C++语言参考

标准C++库参考