Различие высокого уровня составляет время жизни объекта . Например, если вы пишете видеоигру, вы должны расположить объекты, соответствующие монстрам в куче, через new
. Таким образом, лежащий в основе объект монстра живет ровно столько же, сколько и монстр, что непостижимо, когда вы пишете программу. Когда игрок убивает монстра, ваш код может уничтожить объект монстра, используя delete
.
Счетчик общего счета, с другой стороны, вы бы использовали другую форму, потому что вы знаете, как долго вы хотите, чтобы счетчик оставался рядом (предположительно, до тех пор, пока игра запущена!). Поместив эту форму в «глобальную область» вне тела функции, она будет размещена статически как часть самого двоичного файла программы.
Наконец, если вы вычисляете сумму массива, например:
int mysum(int* arr, int len) {
int sum = 0;
for (int i = 0; i < len; ++i) { sum += arr[i] }
return sum;
}
переменная sum
размещена в стеке, что в принципе и является тем, что вам нужно: временная переменная, которую вам не нужно явно освобождать, и которая присутствует только тогда, когда эта функция действительно выполняется.