C++:将引用成员初始化为在初始化列表中创建的对象

mac*_*ord 3 c++ initialization reference initializer-list

请考虑以下代码:

class Foo {
    Foo() {}
};

class Bar {
    Foo &Foo_ref;
    Bar() : Foo_ref() {}
};
Run Code Online (Sandbox Code Playgroud)

按原样编写,我收到错误:

tmp.cc: In constructor Bar::Bar():
tmp.cc:7: error: value-initialization of Foo& Bar::Foo_ref, which has reference type

我试过了我能想到的每一个变化.我究竟做错了什么?如何将引用成员初始化为新实例?我现在使用const指针而不是引用作为解决方法,但我更喜欢使用引用.

And*_*rew 5

必须始终将引用绑定到对象.您必须在构造函数中传递要引用的对象

Bar(Foo &foo) : Foo_ref(foo)
{
}
Run Code Online (Sandbox Code Playgroud)

如果你不想(或不能)传递FooBar构造函数 - 你必须使用指针:

class Bar {
    Foo *Foo_ptr;
    Bar() : Foo_ptr(nullptr) {}
};
Run Code Online (Sandbox Code Playgroud)

您可以将引用成员变量视为必须在初始化列表中绑定的指针


Ben*_*igt 5

怎么了

class Bar
{
    Foo myFoo;
    Bar() : myFoo() {}
};
Run Code Online (Sandbox Code Playgroud)

如果你想要一个全新的 Foo 对象?