我正在为一个类创建一个接口(interface)包装。类中的成员是一个引用(以避免复制大型结构)。如果我创建一个私有(private)构造函数,初始化该引用以安抚编译器的最佳方法是什么?

struct InterfaceWrapper {
    InterfaceWrapper( SomeHugeStructure& src ):m_internal(src){};
    int someElement(void) const { return m_internal.someElement; };
private:
    InterfaceWrapper(){}  // initialize m_internal
    SomeHugeStructure& m_internal;
};

最佳答案

正如其他人提到的那样,如果您的目的是防止其他人调用默认构造函数,那么您根本就不希望提供主体,并且声明它是不必要的,因为您有另一个构造函数,并且编译器不会为该主体生成该主体。你。

如果目的是限制对类 friend 的访问,那么您最好是拥有一个指针(最好是智能指针)成员,并将其设置为NULL。

--

另外,我不确定您为什么将其设置为结构而不是类。通常,在将数据成员公开给公众(类似于C)时,使某种结构有意义。在这种情况下,看起来像您有一个常规类,在这种情况下,C++约定就是将其设为一个类。

10-07 19:34
查看更多