在初始化列表中初始化对象
Initialize object in initializer list
我有一个class Foo
,我需要初始化对另一个类的引用,但首先我需要从另一个类获得一些引用接口。
这只是一个虚拟代码,以便更好地解释我的两个问题:
class Foo
{
public:
Foo();
~Foo();
private:
int m_number;
OtherClass& m_foo;
};
Foo::Foo() :
m_number(10)
{
// I really need to do this get's
Class1& c1 = Singleton::getC1();
Class2& c2 = c1.getC2();
Class3& c3 = c2.getC3();
//How can I put the m_foo initialization in the initialization list?
m_foo(c3);
}
问题是:
1 -在初始化成员m_foo
之前,我需要检索上面所有的引用。但是我想初始化初始化列表中的m_foo
。最好的方法是什么,而不是在一行中。有办法吗?
2 -执行上面的代码,我得到错误:
error: uninitialized reference member 'OtherClass::m_foo' [-fpermissive]
因为我用圆括号进行初始化就像在初始化列表中一样。我怎样才能正确地初始化m_foo
?
可以使用委托构造函数(c++ 11以后):
class Foo
{
public:
Foo() : Foo(Singleton::getC1()) {}
private:
explicit Foo(Class1& c1) : Foo(c1, c1.getC2()) {}
Foo(Class1& c1, Class2& c2) : Foo(c1, c2, c2.getC3()) {}
Foo(Class1& c1, Class2& c2, Class3& c3) : m_number(10), m_foo(c3)
{
// other stuff with C1, c2, c3
}
// ...
};
相关文章:
- C++使用整数的压缩数组初始化对象
- 如何使用cudaMallocManaged在指针位置初始化对象?(C++)
- 在 c++ 中初始化对象
- C++ 手动分配和初始化对象
- 使用运算符"="在C++中用值初始化对象
- 当我不需要数据库中的所有值时,如何部分初始化 c++ 对象?
- 如何初始化对象数组?
- 在C++中使用默认构造函数初始化对象的不同方法
- 使用默认构造函数初始化对象的不同方法
- 是否可以在编译时初始化对象的 C 样式函数指针,以便它调用对象的成员函数?
- 如何在线程中初始化对象,然后在其他地方使用它?
- 在没有默认构造函数时使用垃圾数据初始化对象
- 如果在 C++ 构造函数中以错误的顺序初始化对象数据,会发生什么类型的错误
- 初始化对象以在 C++08 中作为参数传递的首选语法是什么?
- 在 c++ 中复制对未初始化对象的引用
- 在成员变量在另一个文件中发生更改后,调用与初始化对象分开的函数
- 在不放置新运算符的情况下,在预分配的内存上使用虚函数初始化对象 - 这可能吗?如果没有,为什么
- 复制 CTOR 与赋值运算符以初始化对象(性能)
- 当您通过分配初始化C 对象时会发生什么
- 获取未初始化对象成员的地址是否定义良好?