我有一个类 A,它引用了类 B 的一个对象作为成员。 B 类的复制构造函数(和赋值运算符)是私有(private)的。你认为使用它是一个有效的好主意吗 A 的默认复制构造函数。(我实际上想要一个功能,我可以在某种需要分配能力和复制能力的 STL 容器中存储 A 类型的大量对象。)
class A
{
private:
B& b_;
public:
A(B& b) : b_(b){}
}
到目前为止,据我所知,对上述方法的反对意见如下,但我的设计没有面对它。我想知道上面的例子是否还有其他问题/问题/疑虑...
- 只复制引用,因此,当类型 B 的原始对象 b 被销毁时会出现问题。 (不适用,因为 b 在整个范围内都可用。)
- 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/