В C ++ вопрос несколько сложнее, но в целом нельзя избежать размещения в куче.Например, ваша операция new
выделяет объект Application
в куче - new
выделяет память динамически во время выполнения, где выделение auto
памяти равно , определенное во время компиляции.(На самом деле, конечно, выделено во время выполнения - но оно выделяется, поскольку код запуска создает стек для main
в соответствии с скомпилированными выделениями.)
Теперь, почемуВы бы хотели бы , чтобы избежать размещения в куче?Это может быть из-за ограниченных размеров кучи, но с современными машинами это проблема редко, даже в портативных устройствах.Однако пространство стека вполне может быть ограничено.Так что это говорит о куче.
Конечно, auto
память не «протекает» - но память, выделенная в основной (или в файловой области, хотя это статично), не освобождается, поэтомуможно было почти утверждать, что это «автоматически» просочилось.
Я думаю, что основной вопрос здесь действительно заключается в том, «почему не будет вы выделите в куче?»Основная причина обычно состоит в том, чтобы избежать утечек памяти, но осторожность при использовании new/delete
может защитить вас от этого - и учитывая повсеместное динамическое распределение в библиотеках и тому подобное, вы не можете перестать думать о хорошей гигиене памяти, даже если вы придумаличтобы избежать динамического выделения.