[英]C++ creating a copy constructor for a class with a reference member variable
我有一个类ModelRecorder
与包含参考modelRef_
到另一个类OpModel。
class ModelRecorder : public CompositionalModel //This is an abstract base class
{
OpModel& modelRef_;
};
当一个实例ModelRecorder
创建和modelRef_
被initalized。 很好,我无法理解。
我将如何为ModelRecorder
写一个副本构造函数,以便如果创建另一个实例,则引用成员modelRef_
将与先前创建的OpModel对象一起初始化?
请注意, CompositionalModel
是抽象的基类。
在另一个类中,函数可以返回对基类的CompositionalModel
的引用。 我知道返回较窄的基类是一个很好的OOP。
例如CompositionalModel& recordedModel();
我想将此对基类的引用传递给复制构造函数。
我尝试了这个,但它给出了错误,这是正确的modelRef
在取消引用的类ModelRecorder
。
错误:“常量类mv :: CompositionalModel”没有名为“ modelRef_”的成员
mv::ModelRecorder::ModelRecorder(const CompositionalModel& arg) : CompositionalModel{static_cast<const ModelRecorder&>(arg)}, modelRef_{arg.modelRef_}
{
}
有两种方法:
第一种方法-使编译器为您完成此操作:
ModelRecorder(const ModelRecorder&) = default;
第二种方法-自己实施:
ModelRecorder(const ModelRecorder& arg)
:CompositionalModel{arg}, modelRef_{arg.modelRef_} {}
请注意,由于我们要处理引用, 因此必须使用成员初始化器列表。 上面的代码和这个之间的区别:
ModelRecorder(const ModelRecorder& arg)
:CompositionalModel{arg} {
modelRef_ = arg.modelRef_;
}
是后者不会初始化引用 。 它违反了规则,因为引用必须初始化,以后再不分配。 我最好的建议是坚持使用简单的方法,因为使用它的可能性最小
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.