【发布时间】:2018-08-09 18:18:52
【问题描述】:
有一个众所周知的clone 习惯用法用于通过指向Base 类的指针复制Derived 对象。
class Base{
int b;
public:
virtual unique_ptr<Base> clone() const = 0;
virtual ~Base() = default;
};
class Derived : public Base {
int d;
public:
virtual unique_ptr<Base> clone() const override {
return std::make_unique<Derived>(*this);
}
}
但是,在这种情况下,我找不到如何定义复制构造函数和赋值的明确说明。这就是我认为应该在Base 类中完成的方式:
class Base {
protected:
Base(const Base&) = default;
private:
Base& operator=(const Base&) = delete;
}
是否有必要(为了避免潜在的切片)?这是正确的方法吗?是否足够或者我应该将此类声明添加到Derived 类中?
【问题讨论】:
-
如果您处理指向对象的指针,您将永远不会分配或复制构造函数。
-
这取决于您当前的用例。如果您只想允许克隆 - 或者克隆和复制都可以接受。为了允许克隆和复制 - 根本不用担心那些东西。对于不允许复制 - 删除你的分配并保护你的复制构造函数 - 就像你展示的那样。
-
谢谢,已修复。 @Piotr,就我而言,派生类中的复制构造函数会自动受到保护吗?
标签: c++ inheritance cloning