C++为具有引用成员变量的类创建复制构造函数
C++ creating a copy constructor for a class with a reference member variable
我有一个类ModelRecorder
包含对另一个类OpModel的引用modelRef_
。
class ModelRecorder : public CompositionalModel //This is an abstract base class
{
OpModel& modelRef_;
};
创建ModelRecorder
实例并启动modelRef_
时。那很好,我不能忍受。
我将如何为ModelRecorder
编写复制构造函数,以便在创建另一个实例时,引用成员modelRef_
将使用先前创建的OpModel对象启动?
请注意,CompositionalModel
是一个抽象基类。
在另一个类中,有一个函数返回对基类CompositionalModel
引用。我知道返回较窄的基类是一个很好的 OOP。
例如CompositionalModel& recordedModel();
我想将此对基类的引用传递给复制构造函数。
我试过这个,但它给出了错误,这是正确的modelRef
在 dereived 类ModelRecorder
.
错误:"const 类 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_;
}
是后者不初始化引用。它违反了规则,因为引用必须初始化,而不是稍后分配。我最好的建议是坚持使用简单的方法,因为它最不可能搞砸使用它
相关文章:
- 创建一个没有复制构造函数的类的 std::vector 的 std::vector
- 如何在新数组较小时创建新数组并将旧数组的最后一个元素复制到新数组中?
- 是否可以/希望创建不可复制的共享指针模拟(以启用weak_ptr跟踪/借用类型语义)?
- C++为具有引用成员变量的类创建复制构造函数
- 在c++中为链接列表创建复制构造函数/函数
- 我正在考虑为"A"类创建复制构造函数,但我不确定采用哪种方法
- 如何禁用在工厂方法之外创建/复制 obj?
- Windows Portable设备 - 创建 /复制 /删除新文件时通知
- 如何在具有指向对象的指针数组的类中创建复制构造函数和析构函数,其中对象本身具有指向整数的指针数组
- 为什么C++编译器会创建复制构造函数和复制赋值运算符
- 为什么在 c++ 中创建复制构造函数之前需要显式构造函数
- 试图在vector类中创建复制函数
- 为堆栈类创建复制构造函数
- 在模板中创建复制链表的函数时遇到问题
- 如何为链表创建复制构造函数
- 创建复制构造函数时调试断言失败
- 我不能为双向映射创建复制构造函数
- 为字符串类创建复制构造函数
- 如何在c++中使用std::list迭代器存储在std vector中,创建复制安全容器
- 从派生类创建复制构造函数和赋值运算符