@sddvxd

В чем различие между объявлением с new и без него?

Кроме того, что конструкция с new позволяет потом освободить память вручную
  • Вопрос задан
  • 262 просмотра
Решения вопроса 1
@Mercury13
Программист на «си с крестами» и не только
ПОЛОЖЕНИЕ В ПАМЯТИ
Без new: static/глобальная — в сегменте данных, локальная — на стеке. В сегменте данных память отводится при компиляции линковке, создать стековый фрейм — две команды процессора.
С new: в куче. Управление кучей — довольно сложная задача, и если этих new много, программа может начать тормозить.

ВРЕМЯ ЖИЗНИ
Без new: объект живёт, пока выполнение находится в данном блоке. При выходе из блока автоматически срабатывает деструктор.
С new: уничтожаем, когда хотим.

ИМЕНОВАНИЕ
Без new: объект привязан к своему имени.
С new: объект безымянный (имя только у указателя). Потому возможны структуры данных переменного размера: динамические массивы, связанные списки, деревья и прочее.

РАЗМЕР
Без new: задан при компиляции. То есть массив на 10 позиций, и точка, больше — только перекомпиляцией.
С new: произвольный.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@res2001
Developer, ex-admin
new выделяет память в куче, а определение без new - на стеке, со всеми вытекающими преимуществами и недостатками. Нужно понимать когда определять объект в куче, а когда на стеке.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы