如何在默认构造函数中初始化引用成员?

时间:2013-02-26 16:35:47

标签: c++ pointers reference

问题确实说明了。

如果我要实现默认构造函数,那么使用const指针成员会更好吗?

2 个答案:

答案 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所示,您可以从某个函数获取对某个对象的引用。