我试图了解副本构造函数。在下面的构造函数定义中,类DataModel
从ComputationModel
派生而来。
我的问题是,当您将对基类的引用传递给派生类的构造函数时,这是副本构造函数吗?
为什么默认的复制构造函数在这里不够用?
class DataModel : public ComputationModel {
public:
DataModel(const ComputationalModel &other);
//..
};
mv::DataModel::DataModel(const ComputationModel &other) :
ComputationModel(other)
{}
答案 0 :(得分:0)
从技术上讲,您可以使用git rebase
引用作为函数参数来定义git reset
的副本构造函数。
DataModel
但是,这几乎绝不是一个好主意,因为对象的复制构造通常需要从中复制对象的状态。传递基类引用时,将删除派生类实例的所有数据成员,这会使新创建的对象处于难以从客户端代码猜到的状态。
在您的情况下,默认的复制构造函数具有完全相同类型的const限定引用参数:
ComputationalModel
这使我想到了您的最后一个问题
为什么这里的默认副本构造函数不够用?
如果不查看继承层次结构的其余部分,这很难分辨。指导原则是:如果层次结构中所有数据成员的副本构造函数执行正确的操作,则默认的副本构造函数也执行正确的操作。