0

在 pimpl idiom 中,所有私有成员和函数都被移动到(私有)实现类。如果一个类有一个私有构造函数应该怎么办?是否应该将其移至实施?如果是,如何?

class X {
private:
    X();  // moving it to XImpl???
public:
    void DoSomething();
private:
    class XImpl;
    std::unique_ptr<XImpl> pimpl;
};
4

1 回答 1

3

由于各种原因,PIMPL 完全是为了消除不希望的公共标头依赖性。例如,使用单词的 C 头文件class(正确性)、增加构建时间的大头文件(工作效率)、带有不良宏的头文件(代码脆性)。C++ 可访问性,privatepublicorprotected无关,尽管如果可访问性与功能是否属于 PIMPL 类密切相关,这一点也不奇怪:通常这些功能将是实现细节。

当您理解 PIMPL 之类的技术并且该技术是解决手头问题的好方法时,请使用它。

不要盲目地应用基于食谱式机械规则的各种技术。当您清楚地看到呈现给您的这样一个规则集是不完整的,就像这里一样,那么正确的反应是关闭规则集,而不是要求它完成。它无法完成,它导致的关于如何处理private构造函数的问题是没有意义的。

于 2015-02-18T07:12:24.203 回答