在pimpl习惯用法中,所有私有成员和函数都被移动到(私有)实现类。如果一个类有私有构造函数应该怎么做?它应该转移到实施吗?如果是,怎么样?
class X {
private:
X(); // moving it to XImpl???
public:
void DoSomething();
private:
class XImpl;
std::unique_ptr<XImpl> pimpl;
};
答案 0 :(得分:3)
由于各种原因,PIMPL就是要删除不需要的公共头依赖关系。例如,C标题使用单词class
(正确性),大标题添加到构建时间(工作效率),标题包含ungood宏(代码脆弱)。 C ++辅助功能private
与public
或protected
无关,但如果辅助功能与功能是否属于PIMPL类有很强的关系,那么它并不是不自然的:通常这些功能将是实现细节。
当你理解它时,使用像PIMPL这样的技术,这项技术可以很好地解决手头的问题。
不要盲目地应用基于类似食谱的机械规则的各种技术。当你清楚地看到你所呈现的这样一条规则是不完整的,就像在这里一样,那么正确的反应是解除规则集,而不是要求它完成。它无法完成,它导致如何处理private
构造函数的问题毫无意义。