问题确实说明了。
如果我要实现默认构造函数,那么使用const指针成员会更好吗?
答案 0 :(得分:4)
您需要使用成员初始化列表:
struct foo
{
const int& ref;
foo() : ref(some_value()) { }
}
确保some_value()
不会给你一个临时的。它的生命只会延长到构造函数的结尾:
构造函数的ctor-initializer(12.6.2)中的引用成员的临时绑定将持续存在,直到构造函数退出。
答案 1 :(得分:3)
嗯,这取决于您希望您的成员在默认情况下引用的内容。一个可能的解决方案是拥有一个默认对象(可能是某种Null object):
struct Foo
{
Foo() : bar_(defaultBar) {}
Foo(Bar &bar) : bar_(bar) {}
private:
Bar &bar_;
static Bar defaultBar;
};
或者,正如@sftrabbit所示,您可以从某个函数获取对某个对象的引用。