Объем жизни объекта C ++

Кажется, я неверно истолковал жизненный объем объектов в 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, я пытаюсь получить значение из него, но это не сработает, потому что объект будет мертв. Может ли кто-нибудь просветить меня? Не жалейте мне никаких деталей!

-2

Решение

И я подумал, что когда 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) {}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]