Кажется, я неверно истолковал жизненный объем объектов в 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, я пытаюсь получить значение из него, но это не сработает, потому что объект будет мертв. Может ли кто-нибудь просветить меня? Не жалейте мне никаких деталей!
И я подумал, что когда m1 получает нединамический объект, который был создан «в стеке» функции getMyClass, я пытаюсь получить значение из него, но это не сработает, потому что объект будет мертв. Может ли кто-нибудь просветить меня? Не жалейте мне никаких деталей!
Есть немного недоразумений.
Да, объект создается в стеке getMyClass
,
Да, объект мертв, когда функция возвращается.
Тем не менее, строка:
m1 = MyClass::getMyClass(4);
присваивает возвращаемое значение функции m1
до того, как объект мертв. Объект живет достаточно долго, чтобы время выполнения могло выполнить задание.
Кстати, линия
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) {}
Других решений пока нет …