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