MyClass myClass;
хранится в стеке.Он уничтожается сразу после выхода myFunction()
.
Когда вы return
делаете это, в стеке создается копия.Эта копия существует до конца включающего выражения: cout << myFunction().ch;
Обратите внимание, что если ваш компилятор достаточно умен, второй объект вообще не должен быть создан.Скорее, первый объект будет жить до конца включающего выражения.Это называется NRVO , Именованная оптимизация возвращаемого значения .
Также обратите внимание, что стандарт не определяет "стек".Но любая обычная реализация будет использовать стек в этом случае.
, если возвращаемая структура отличается от возвращаемого класса?
В C ++ нет структур;Ключевое слово struct
создает классы.Единственная разница между class
и struct
заключается в доступе к члену по умолчанию, поэтому ответ «нет».