我有以下 C++ 类:
// Header-File
class A
{
public:
A();
private:
B m_B;
C m_C;
};
// cpp-File
A::A()
: m_B(1)
{
m_B.doSomething();
m_B.doMore();
m_C = C(m_B.getSomeValue());
}
我现在想要avoid the class A
打电话any的构造函数C m_C
。因为在最后一行A::A()
,无论如何我都会初始化m_C
我自己,因为我需要准备m_B
第一的。我可以提供一个空的默认构造函数class B
。但事实并非如此。
我已经尝试添加m_C(NULL)
到初始化列表A::A()
。有时它有效,有时它说没有构造函数NULL
作为一个论点。
那么我怎样才能拥有m_C
未初始化?我知道通过指针,m_C(NULL)
-方式有效。我不想使用动态分配它new
.
任何想法表示赞赏。
使用此 QA 中描述的技术怎么样?
防止调用类内数组的默认构造函数 https://stackoverflow.com/questions/12304629/prevent-calls-to-default-constructor-for-an-array-inside-class
std::aligned_storage<sizeof(T[n]), alignof(T)>::type
或者,您也可以考虑使用union
。 AFAIK,联合将仅使用第一个命名成员的构造函数进行初始化。 https://stackoverflow.com/questions/7751242/does-a-union-always-have-default-value-of-zero
例如,
union
{
uint8_t _nothing = 0;
C c;
};
根据QA中提到的标准,c
将被零初始化,并且其构造函数将不会被调用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)