这个设计模式是什么?如何使用它?

kra*_*lyk 11 c++ oop design-patterns

假设我有这样的类(简化):

class Foo_p;
class Foo
{
private:
  Foo_p *p;
public:
  Foo();
  /* methods, etc... */
};
Run Code Online (Sandbox Code Playgroud)

该类是API的一部分.Foo_p是类的所有私有部分,它们不像往常一样在类Foo本身中声明,而是在一个单独的前向声明的类中,该类仅由外部不可见的底层实现使用.

我看过这个模式在几个项目中使用过,有没有名字呢?

另外,如何正确使用它(例如异常安全等)?实际实施应该在哪里?在Foo类中,像往常一样,只使用Foo_p存储数据,或者在Foo_p类中使用Foo只是一个包装器?

Joh*_*ohn 8

这是众所周知的PIMPL.私有/指向私有实现.类,Foo_p您的类一直为私人实施,并通过指针访问它,因此而不是显示真实类客户,他们只能看到您选择公开的公共接口.它本质上抽象从报头的实现细节的痕迹存在于远离protectedprivate成员.

我发现它在VC++中不实用 - 它破坏了代码完成.如果你很确定你的执行和不希望它是有用的privateprotected成员的标题显示.

我把类的实际实现Foo_p放在了cpp文件中Foo,虽然这可能是代码完成破坏的原因,但至少我不必冒着通过包含它的头来重用类的风险.


seh*_*ehe 8

这就是pimpl的习语

看到