构造函数会破坏成员变量

d3L*_*d3L -3 c++ variables constructor member

为什么在第二次调用构造函数时删除了初始化成员变量?

例:

class MyClass {
    private:
        unsigned myValue;

    public:
        MyClass(void)
        {
            this->myValue = 1337;

            fprintf(stderr, "myValue: %d\n", this->myValue);
        }

        MyClass(int myFirstValue)
        {
            fprintf(stderr, "myValue: %d\n", this->myValue);
        }
};

int main()
{
    /* Constructor is called */
    MyClass myInstance;

    /* Call other constructor ; myInstance->myValue is now trashed */
    myInstance = 100;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

myValue: 1337
myValue: 1606416392
Run Code Online (Sandbox Code Playgroud)

预期产出:

myValue: 1337
myValue: 1337
Run Code Online (Sandbox Code Playgroud)

有没有办法保持初始化成员变量?

jua*_*nza 5

当你这样做

myInstance = 100;
Run Code Online (Sandbox Code Playgroud)

使用MyClass构造函数在RHS上构造临时MyClass(int).然后使用临时值为LHS分配值.

该构造函数不初始化成员变量.读取未初始化的成员会导致未定义的行为,在您的情况下似乎会导致打印垃圾值.

因此,您需要初始化它,假设您要将成员初始化为构造函数中传递的值:

MyClass(int myFirstValue) : myValue(myFirstValue)
{
  // as before
}
Run Code Online (Sandbox Code Playgroud)

编辑,因为您期望成员的价值1337,您需要

MyClass(int myFirstValue) : myValue(1337) { .... }
Run Code Online (Sandbox Code Playgroud)