c++ - 关于包含不可复制成员引用的类的复制构造函数的建议

标签 c++ copy-constructor private-constructor default-copy-constructor

我有一个类 A,它引用了类 B 的一个对象作为成员。 B 类的复制构造函数(和赋值运算符)是私有(private)的。你认为使用它是一个有效的好主意吗 A 的默认复制构造函数。(我实际上想要一个功能,我可以在某种需要分配能力和复制能力的 STL 容器中存储 A 类型的大量对象。)

class A
{
    private:
        B& b_;

    public:
        A(B& b) : b_(b){}
}

到目前为止,据我所知,对上述方法的反对意见如下,但我的设计没有面对它。我想知道上面的例子是否还有其他问题/问题/疑虑...

  1. 只复制引用,因此,当类型 B 的原始对象 b 被销毁时会出现问题。 (不适用,因为 b 在整个范围内都可用。)
  2. b_ 对于 A 的每个实例都是唯一的吗? (不,B 实际上只在范围内实例化一次,所以它具有单例类的效果。)

如果还有其他问题,请在此处列出。我不喜欢明确定义的复制构造函数,但我对此持开放态度。

最佳答案

作为一般准则,我从不将引用存储在对象内部,因为我无法免费获得复制语义。

我改为存储指针。在这里,存储一个哑指针并让编译器为您实现复制语义似乎很好:

class A
{
    B* b; // or a smart pointer, depending on what semantics you want.

public:
    A(B& b) : b(&b) {}
};

使用指针具有一定的灵 active :例如,默认构造可以将指针设置为零,随后的操作会检查其有效性(或简单地断言)。此外,指针可以重置,而引用则不然。

关于c++ - 关于包含不可复制成员引用的类的复制构造函数的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6847457/

相关文章:

c++ - 如何从其上方定义的类中访问该类?

c++ - 错误 C2512 : no appropriate default constructor available (not classes)

C++复制构造函数运行时错误

c++ - 如何在基类中使用复制构造函数?

c++ - 私有(private)构造函数

c# - .Net 中的私有(private)构造函数与静态构造函数

c++ - 如何在访问指针值时保护应用程序免受读取访问冲突?

c++ - 无法从 'Node<T> *' 推断出 'int' 的模板参数

c++ - 为什么不调用复制构造函数?

java - Java中从类外部调用私有(private)方法