如何在c ++中显式初始化引用?

时间:2012-07-01 21:19:05

标签: c++

我有以下代码:

class SomeClass {};

class SomeOtherClass {
    SomeClass& someObj;
public:
    SomeOtherClass() {someObj = SomeClass();}
};

我在SomeOtherClass Constructor for 'SomeOtherClass' must explicitly initialize the reference member 'someObj'的构造函数中收到错误。

所以我猜我的问题非常紧张。你如何初始化参考?

3 个答案:

答案 0 :(得分:9)

您正在尝试存储对正在被立即销毁的临时对象的引用,因此肯定会出错;即使使用其他答案中描述的构造函数初始化列表。

引用应该指向一个存储在别处的对象,就像指针一样。你确定在这种情况下甚至需要使用引用吗?

答案 1 :(得分:7)

作为constructor initialization list的一部分:

SomeOtherClass() : someObj(SomeClass()) {}

更新:我应该提醒一下,这是你不应该逐字使用的东西,因为它会导致对即将死亡的临时对象的引用实例

这个想法是上面的,但你必须传入一个生命周期不短于你正在构建的SomeOtherClass实例的对象。

答案 2 :(得分:3)

您必须在构造函数的初始化列表中初始化它,因为引用没有“default”或“null”初始化:

class SomeOtherClass {
    SomeClass& someObj;
public:
    SomeOtherClass(SomeClass& sc) : someObj(sc) {}
};
正如在另一个答案中指出的那样

编辑,您应该注意将您的引用初始化为一个对象,其生命周期与包含该引用的对象相同或更长。在上面的示例中,假设scSomeOtherClass实例更长。