gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 01:18:43 25 4
gpt4 key购买 nike

我有一个类 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com