3

问题真的说明了一切。

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

4

2 回答 2

5

您需要使用成员初始化列表:

struct foo
{
  const int& ref;
  foo() : ref(some_value()) { }
}

确保some_value()不给你一个临时的。它的寿命只会延长到构造函数结束:

临时绑定到构造函数的 ctor-initializer (12.6.2) 中的引用成员将持续存在,直到构造函数退出。

于 2013-02-26T16:38:29.183 回答
3

好吧,这取决于您希望您的成员在默认情况下引用什么。一个可能的解决方案是拥有一个默认对象(可能是某种Null 对象):

struct Foo
{
    Foo() : bar_(defaultBar) {}
    Foo(Bar &bar) : bar_(bar) {}

  private:
    Bar &bar_;
    static Bar defaultBar;
};

或者,正如@sftrabbit 所示,您可以从某个函数获取对某个对象的引用。

于 2013-02-26T16:42:18.760 回答