我可以在 class 中初始化引用吗? (也许在构造函数中?)

Can I initialize references in a class? (perhaps in the constructor?)

我的 C++ 有点生疏,尤其是 references.

我有一个旧代码,类似于

TEST(SomeTest,someFunction){

AClass anObject= GetSomeObject();
ASingletonClass &aReference= ASingletonClass::GetInstance();
//... some more code
}

由于设计的原因,我不得不重写这段代码,这次我不得不使用辅助class (*)

class ASingletonClassFixture: public testing:Test{
 public:
  void SetUp() override
   {
     anObject=GetSomeObject();
     aReference=  ASingletonClass::GetInstance();
   }

 protected:
  AClass  anObject;
  ASingletonClass   &aReference;  //<--I don't think this is correct
}

我认为上面的代码不正确,因为引用应该在创建时进行初始化。

所以我的问题是我怎样才能做这样的事情?我可以在构造函数中完成吗?

(*) 如果您有兴趣 - 虽然不是必须知道 - 是因为我正在编写测试夹具。

是的,您可以在测试构造函数中进行 - 甚至是推荐的方式:

class ASingletonClassFixture: public testing::Test{
 public:
    ASingletonClassFixture() : aReference{ASingletonClass::GetInstance()} {}

  void SetUp() override
   {
     anObject=GetSomeObject();
   }

 protected:
  AClass  anObject;
  ASingletonClass   &aReference;  //<--I don't think this is correct
};

参见this FAQ

但是,请注意,即使构造函数和 SetUp 在 each 测试主体之前被调用(顺序始终是 ctor、SetUp、 test body, TearDown, dtor),假设你使用的是单例 - 它只会被初始化一次,它的状态将在测试用例之间共享!更重要的是,如果您在同一个测试二进制文件中有更多的测试套件,因为单例很可能是作为静态对象实现的,它将为整个测试二进制文件初始化一次,并在 main 方法的 main 方法中取消初始化二进制退出。