传递对构造函数的引用
Pass a reference to a constructor
如果这是一个非常简单的问题,我很抱歉,但我是 c++ 的新手,并且正在研究一个简单的可发音训练器来理解 C++。(来自爪哇。
我想传递一个const FileManager
作为对我的逻辑的引用。但我不明白它的工作。我不想有副本之类的。
所以我这样尝试:(主要)
FileManager& file = FileManager();
Logic logic = Logic(file);
在逻辑内部,我想存储引用:
class Logic
{
public:
Logic(const FileManager& manager);
~Logic();
private:
const FileManager& m_fileManager;
};
Logic::Logic(const FileManager& manager) :
{
m_fileManager = manager;
}
谢谢
输入构造函数的主体后,所有成员变量都已初始化。此后,您只能分配给它们。这不适用于引用 - 正如我们所知,它们需要在生命周期开始时进行初始化。
您需要使用成员初始值设定项列表:
Logic::Logic(const FileManager& manager)
: m_fileManager(manager) // m_fileManager is initialized here
{
}
考虑是否真的需要引用成员。首先,它们使您的类不可分配。智能指针可能是更好的选择。
你的例子有三个缺陷。首先,您尝试使用临时对象初始化 none const 引用:
FileManager& file = FileManager();
很可能您只想在此处使用文件管理器实例:
FileManager file;
其次,必须初始化引用。您可以使用初始值设定项列表语法来实现此目的:
Logic::Logic(const FileManager& manager)
: m_fileManager( manager )
{
}
此外,用于逻辑的初始化要求逻辑是可分配的。只需使用:
Logic logic(file);
如果类中有引用成员,则默认情况下不可分配该类的对象。
相关文章:
- 在类构造函数中传递对外部函数的引用
- 在 c++ 中将变量作为结构构造函数中的引用传递
- C++ 尝试在不存在的构造函数中引用已删除的函数(使用 rapidJson)
- 移动构造函数和右值引用
- 为什么我的运算符 + 重载尽管是通过引用传递的,但仍调用我的复制构造函数?
- 如何使用 swig 修改类构造函数以保留对其中一个构造函数参数的引用?
- 在引用初始化中使用已删除的复制构造函数进行复制初始化
- C++:右值引用构造函数和复制省略
- 当有右值构造函数可用时,为什么从右值调用类引用构造函数重载?
- 引用构造函数时链接失败
- 为什么调用转发引用构造函数而不是复制构造函数?
- 为什么使用已删除的右值引用构造函数?
- 对 std::Optional 的转发引用构造函数的约束
- 模板是否应该为不同类型的参数制作非 Rvalue 引用构造函数/赋值
- 我是否应该对非引用构造函数参数手动调用move
- 使用左值引用错误地调用了Rvalue引用构造函数
- C++未定义的引用构造函数错误
- 调用左值引用构造函数而不是右值引用构造函数
- C++引用构造函数语法
- 不能引用构造函数的地址