В чем смысл использования динамического выделения памяти для переменных?

Объясните мне пожалуйста, есть ли смысл и какой он в использовании динамических переменных(именно переменных, не массивов) (кроме того что их просто можно потом удалить)? Я посмотрел много сайтов и везде пишут только про динамические массивы, я это понял, что если я изначально не знаю размер массива его лучше сделать динамическим и тд. я понял вот это:

int* a = new int[size];

но зачем и в каких случаях мне нужно вот это:

int* a = new int(number);

Есть ли в этом какой то еще смысл, кроме того что ее можно создавать/очищать когда нужно?

P.S я понимаю как и зачем нужны динамические массивы, мне нужно только объяснения про динамические переменные!


Ответы (2 шт):

Автор решения: KoVadim
int* a = new int[size];

здесь создается массив на size элементов.

int* a = new int(number);

а здесь создается один int в куче, который инициализируется значением number. Обычно такое не нужно, но если объект чуть посложнее, то используется постоянно.

→ Ссылка
Автор решения: pepsicoca1

Объясните мне пожалуйста, есть ли смысл и какой он в использовании динамических переменных (кроме того что их просто можно потом удалить)?

Да, в этом есть глубокий смысл, так как удалив уже использованный массив, Вы можете на этом месте расположить другой массив и работать с ним. Кроме того, статические массивы занимают место в экзешнике (и экзешник становится больше), а динамические массивы не занимают место в экзешнике (и экзешник становится меньше).

если я изначально не знаю размер массива его лучше сделать динамическим

В этом тоже преимущество динамических массивов. Часто при компиляции неизвестно, сколько потребуется места для данных. Для статических массивов приходится резервировать место по-максимуму, что неудобно, хотя бы потому, что размер ОЗУ на разных машинах м.б. разным. Динамические массивы лишены этого недостатка.

Вобщем динамические массивы позволяют более гибко использовать ценный ресурс системы - ОЗУ.

UPD1:

Объясните пожалуйста зачем на ДИНАМИЧЕСКИЕ ПЕРЕМЕННЫЕ, не массивы

Во-первых, динамическая переменная может быть размером поболее иного массива. Конкретно, класс может содержать большой массив (и не один) и тогда все сказанное относится и к единичному экземпляру переменной. Во-вторых, много одиночных переменных разных типов также могут динамически создаваться и уничтожаться во время работы программы, экономя ОЗУ в рантайме и экономя размер экзешника. Опять же Вам неизвестно при компиляции, по какой ветке пойдет выполнение программы. А в зависимости от ветки программа может вообще не будет создавать какие-то переменные. И таким образом программа съэкономит ОЗУ.

UPD2:

Однако учтите, что создание динамической переменной или массива в куче довольно затратная по времени операция (по сравнению с созданием стековой или статической переменной). Поэтому к этому вопросу надо подходить творчески и соблюдать баланс между экономией ОЗУ и быстродействием программы.

→ Ссылка