我似乎误解了c ++中对象的生命范围。如果您考虑以下因素:
class MyClass{
public:
int classValue;
MyClass(int value){
classValue = value;
}
static MyClass getMyClass(int value){
MyClass m1 = MyClass(value);
return m1;
}
};
int main() {
MyClass m1 = MyClass(3);
cout << m1.classValue << endl;
m1 = MyClass::getMyClass(4);
cout << m1.classValue << endl;
return 0;
}
输出:
3
4
我想,当m1获得一个非动态对象时,它已经在getMyClass函数的“堆栈”中创建,我试图从中获取一个值是行不通的,因为该对象将会死亡。有人可以开导我吗?不要遗漏任何细节!
答案 0 :(得分:2)
我想,当m1获得一个非动态对象时,它已经在堆栈上创建了#39; getMyClass函数,我试图从中获取一个值是不行的,因为该对象将死亡。有人可以开导我吗?不要遗漏任何细节!
有一点误会。
是的,该对象是在getMyClass
的堆栈上创建的
是的,当函数返回时,对象已经死了。
但是,行:
m1 = MyClass::getMyClass(4);
在对象死亡之前将函数的返回值赋给m1
。该对象的使用寿命足以允许运行时完成分配。
BTW,该行
MyClass m1;
不正确,因为MyClass
没有默认构造函数。你可以替换
MyClass m1;
m1.value = 3;
只是一个班轮
MyClass m1(3);
<强>更新强>
您需要更改MyClass
的构造函数。
MyClass(int value){
value = value; // This does not initialize the
// member variable of the class.
// The argument shadows the member variable.
}
使用:
MyClass(int valueIn) : value(valueIn) {}