【发布时间】:2018-10-29 09:10:51
【问题描述】:
cpp 核心指南中的列表 C.67 说:基类应该禁止复制,如果需要“复制”,则提供虚拟克隆。
如果复制构造函数在基类中定义为已删除,则基类和所有派生类的移动操作也将被禁止。
另一方面,移动操作可能会提高性能。我的问题是,当我们设计一个类层次结构时,我们应该采用什么样的现实方法?
假设我们有以下类层次结构?我们应该如何设计 A 和 B 以正确支持复制和移动操作。
class A{
public:
A(const std::string& as) = deleted;
//should we define other copy/move operators?
virtual void foo();//
virtual ~A();//
private:
std::string s;
};
class B: public A{
public:
//how do we define copy/move operators?
void foo() override;
~B() override;
private:
std::vector<std::string> vs;
};
【问题讨论】:
-
这与您在使用复制构造函数时遇到的问题相同。如果你只有一个
Base *,你怎么知道要移动哪个派生类?如果你有好的情况,可以将构造函数重新添加到派生类中。 -
什么“类层次结构”?