【发布时间】:2015-05-20 14:18:07
【问题描述】:
假设我们有这样一个类:
class C
{
public:
C() {}
virtual ~C() noexcept { if (c) { delete c; } }
protected:
int a;
float b;
C* c;
}
您将如何正确实现复制和移动构造函数?通常你只会调用需要复制的对象的复制构造函数,但由于它是同一个类,你将如何正确处理呢?
【问题讨论】:
-
c在哪里初始化? -
既然有
this,为什么还要有c?无论如何,两个运算符都应该设置c指向新对象。 -
因不清楚而投票关闭。我可以回答例如一个单链表,这可能是,但它可能还有无数其他的东西。
-
如果你要处理原始指针和内存管理,我建议你使用copy and swap idiom
-
这取决于 C 的新实例应该指向哪个 C 实例。你需要告诉我们更多关于你试图用这个结构解决的问题。