gpt4 book ai didi

c++构造函数将引用传递给基类对象

转载 作者:太空宇宙 更新时间:2023-11-04 12:45:03 25 4
gpt4 key购买 nike

我正在尝试理解复制构造函数。在下面的构造函数定义中,类 DataModel 派生自 ComputationModel

我的问题是,当您将对基类的引用传递给派生类的构造函数时,这是一个复制构造函数吗?

为什么默认的复制构造函数在这里不够用?

class DataModel : public ComputationModel {
public:
DataModel(const ComputationalModel &other);

//..
};

mv::DataModel::DataModel(const ComputationModel &other) :
ComputationModel(other)
{}

最佳答案

从技术上讲,您可以定义 DataModel 的复制构造函数,将 ComputationalModel 引用作为函数参数。

DataModel d1(/* Parameter... */);
ComputationModel c1(/* Parameter... */);

DataModel d2(d1); // copy-construct instance, d1 passed as refence to the base class
DataModel d3(c1); // same behavior

然而,这几乎不是一个好主意,因为对象的复制构造通常需要对象的状态作为复制来源。传递基类引用时,会删除派生类实例的所有数据成员,这会使新创建的对象处于客户端代码难以猜测的状态。

默认复制构造函数有一个完全相同类型的 const 限定引用参数,在您的情况下:

DataModel(const DataModel& other) = default;

这让我想到你的最后一个问题

Why would the default copy constructor not be sufficent here?

如果不查看继承层次结构的其余部分,则很难判断这一点。准则是:如果层次结构中所有数据成员的复制构造函数都做正确的事情,那么默认的复制构造函数也会做正确的事情。

关于c++构造函数将引用传递给基类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52093847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com