避免调用成员变量的构造函数

2024-05-02

我有以下 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(使用前将#替换为@)

避免调用成员变量的构造函数 的相关文章

随机推荐