C ++中的Pimpl习语和私有构造函数

时间:2015-02-18 06:52:23

标签: c++ pimpl-idiom private-constructor

在pimpl习惯用法中,所有私有成员和函数都被移动到(私有)实现类。如果一个类有私有构造函数应该怎么做?它应该转移到实施吗?如果是,怎么样?

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

1 个答案:

答案 0 :(得分:3)

由于各种原因,PIMPL就是要删除不需要的公共头依赖关系。例如,C标题使用单词class(正确性),大标题添加到构建时间(工作效率),标题包含ungood宏(代码脆弱)。 C ++辅助功能privatepublicprotected无关,但如果辅助功能与功能是否属于PIMPL类有很强的关系,那么它并不是不自然的:通常这些功能将是实现细节。

当你理解它时,使用像PIMPL这样的技术,这项技术可以很好地解决手头的问题。

不要盲目地应用基于类似食谱的机械规则的各种技术。当你清楚地看到你所呈现的这样一条规则是不完整的,就像在这里一样,那么正确的反应是解除规则集,而不是要求它完成。它无法完成,它导致如何处理private构造函数的问题毫无意义。