В чем различие между объявлением с new и без него?
ПОЛОЖЕНИЕ В ПАМЯТИ
Без new: static/глобальная — в сегменте данных, локальная — на стеке. В сегменте данных память отводится при компиляции линковке, создать стековый фрейм — две команды процессора.
С new: в куче. Управление кучей — довольно сложная задача, и если этих new много, программа может начать тормозить.
ВРЕМЯ ЖИЗНИ
Без new: объект живёт, пока выполнение находится в данном блоке. При выходе из блока автоматически срабатывает деструктор.
С new: уничтожаем, когда хотим.
ИМЕНОВАНИЕ
Без new: объект привязан к своему имени.
С new: объект безымянный (имя только у указателя). Потому возможны структуры данных переменного размера: динамические массивы, связанные списки, деревья и прочее.
РАЗМЕР
Без new: задан при компиляции. То есть массив на 10 позиций, и точка, больше — только перекомпиляцией.
С new: произвольный.
new выделяет память в куче, а определение без new - на стеке, со всеми вытекающими преимуществами и недостатками. Нужно понимать когда определять объект в куче, а когда на стеке.