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)
有没有办法保持初始化成员变量?
当你这样做
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)