Atm*_*ons 11 c++ initializer-list
我有以下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());
}
Run Code Online (Sandbox Code Playgroud)
我现在想避免在class A调用任何的构造函数C m_C.因为在最后一行A::A(),我总是要m_C自己初始化,因为我需要先做好准备m_B.我可以提供一个空的默认构造函数class B.但那不是主意.
我已经尝试添加m_C(NULL)到init-list中A::A().有时它有效,有时它说没有构造函数NULL作为参数.
那我怎么能没有m_C初始化?我知道,通过指针,m_C(NULL)-way可行.我不想动态分配它new.
任何想法都表示赞赏.
如何使用此质量检查中介绍的技术?
std::aligned_storage<sizeof(T[n]), alignof(T)>::type
Run Code Online (Sandbox Code Playgroud)
或者,您也可以考虑使用union。AFAIK,联合将仅使用第一个命名成员的构造函数进行初始化。
例如,
union
{
uint8_t _nothing = 0;
C c;
};
Run Code Online (Sandbox Code Playgroud)
根据质量检查中提到的标准,c将被初始化为零,并且不会调用其构造函数。
你问的问题是被禁止的——而且是正确的。这确保了每个成员都被正确初始化。不要试图解决它 - 尝试构建他们可以使用它的类。
主意:
| 归档时间: |
|
| 查看次数: |
5944 次 |
| 最近记录: |