传递对构造函数的引用

时间:2013-11-02 12:26:56

标签: c++ reference

我很抱歉,如果这个问题是一个非常简单的问题,但我是c ++的新手,并且正在研究一个简单的vocable培训师来理解c ++。 (来自java ..)

我想将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;
}

由于

2 个答案:

答案 0 :(得分:7)

输入构造函数的主体后,所有成员变量都已初始化。此后,您只能分配给他们。这不适用于引用 - 正如我们所知,它们需要在它们的生命周期开始时进行初始化。

您需要使用成员初始化列表:

Logic::Logic(const FileManager& manager)
    : m_fileManager(manager) // m_fileManager is initialized here
{   
}

考虑一下你是否真的想要一个参考成员。首先,它们使您的课程不可分配。智能指针可能是更好的选择。

答案 1 :(得分:0)

你的例子有三个缺陷。第一个是,您尝试使用临时对象初始化无const引用:

FileManager& file = FileManager();

很可能你只想在这里使用FileManager实例:

FileManager file;

其次,必须初始化引用。您可以使用初始化列表语法来实现此目的:

Logic::Logic(const FileManager& manager) 
  : m_fileManager( manager )
{   
}

此外,用于Logic的初始化要求Logic可分配。只需使用:

Logic logic(file);

如果类中有引用成员,则默认情况下不能分配该类的对象。

相关问题