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

Mic*_*rst 3 c++

我有以下代码:

class SomeClass {};

class SomeOtherClass {
    SomeClass& someObj;
public:
    SomeOtherClass() {someObj = SomeClass();}
};
Run Code Online (Sandbox Code Playgroud)

而我得到的构造的错误SomeOtherClass说法Constructor for 'SomeOtherClass' must explicitly initialize the reference member 'someObj'.

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

Aar*_*oup 9

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

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

  • 使用`*new`将导致内存泄漏,因为现在您无法为此对象释放已分配的内存(除非您将引用强制转换回指针).我建议要么将`someObj`作为指针,要么根本没有指针或引用(这意味着你将`SomeClass`直接存储在`SomeOtherClass`中). (3认同)

Jon*_*Jon 7

作为构造函数初始化列表的一部分:

SomeOtherClass() : someObj(SomeClass()) {}
Run Code Online (Sandbox Code Playgroud)

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

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

  • 在临时的`SomeClass()`被破坏之后会发生什么?你有一个晃来晃去的参考. (2认同)