Термины «куча» и «стек» являются устаревшими, неточными и запутанными терминами, относящимися к продолжительности хранения.
Объекты с «длительностью автоматического хранения» - это то, что глупые люди называют «объектами стека».Это те, которые вы определите внутри функции как «локальные переменные».Они выходят за рамки, когда заканчивается их вмещающий блок.
Объекты с «динамической длительностью хранения» - это те, которые вы создаете в free store с помощью ключевого слова new
(или, если вы глупый, malloc
), а затем уничтожьте, когда захотите, с ключевым словом delete
(или, если вы глупый, free
).
Есть также объекты с "статическая длительность хранения », на которые распространяются всевозможные причудливые правила порядка инициализации и тому подобное.Мы склонны не использовать их в идиоматическом C ++ настолько, насколько мы можем помочь.
Что касается конкретных переменных в вашем примере кода, все ваши комментарии точны, несмотря на ошибку в терминологии.
Приложение:
Термины «куча» и «стек» устарели, когда речь шла о том, когда самые популярные библиотеки времени выполнения использовали эти структуры данных для хранения объектов, которые были динамически и автоматически.распределены соответственно (статически размещенные объекты не попадают ни в одну категорию, между прочим).
В наши дни это не всегда верно, и это, безусловно, не предписано стандартом C ++, который не заботится о том, где что хранится.Его волнует только то, как они созданы и уничтожены, и как долго они живут.