В чем смысл использования динамического выделения памяти для переменных?
Объясните мне пожалуйста, есть ли смысл и какой он в использовании динамических переменных(именно переменных, не массивов) (кроме того что их просто можно потом удалить)? Я посмотрел много сайтов и везде пишут только про динамические массивы, я это понял, что если я изначально не знаю размер массива его лучше сделать динамическим и тд. я понял вот это:
int* a = new int[size];
но зачем и в каких случаях мне нужно вот это:
int* a = new int(number);
Есть ли в этом какой то еще смысл, кроме того что ее можно создавать/очищать когда нужно?
P.S я понимаю как и зачем нужны динамические массивы, мне нужно только объяснения про динамические переменные!
Ответы (2 шт):
int* a = new int[size];
здесь создается массив на size элементов.
int* a = new int(number);
а здесь создается один int в куче, который инициализируется значением number. Обычно такое не нужно, но если объект чуть посложнее, то используется постоянно.
Объясните мне пожалуйста, есть ли смысл и какой он в использовании динамических переменных (кроме того что их просто можно потом удалить)?
Да, в этом есть глубокий смысл, так как удалив уже использованный массив, Вы можете на этом месте расположить другой массив и работать с ним. Кроме того, статические массивы занимают место в экзешнике (и экзешник становится больше), а динамические массивы не занимают место в экзешнике (и экзешник становится меньше).
если я изначально не знаю размер массива его лучше сделать динамическим
В этом тоже преимущество динамических массивов. Часто при компиляции неизвестно, сколько потребуется места для данных. Для статических массивов приходится резервировать место по-максимуму, что неудобно, хотя бы потому, что размер ОЗУ на разных машинах м.б. разным. Динамические массивы лишены этого недостатка.
Вобщем динамические массивы позволяют более гибко использовать ценный ресурс системы - ОЗУ.
UPD1:
Объясните пожалуйста зачем на ДИНАМИЧЕСКИЕ ПЕРЕМЕННЫЕ, не массивы
Во-первых, динамическая переменная может быть размером поболее иного массива. Конкретно, класс может содержать большой массив (и не один) и тогда все сказанное относится и к единичному экземпляру переменной. Во-вторых, много одиночных переменных разных типов также могут динамически создаваться и уничтожаться во время работы программы, экономя ОЗУ в рантайме и экономя размер экзешника. Опять же Вам неизвестно при компиляции, по какой ветке пойдет выполнение программы. А в зависимости от ветки программа может вообще не будет создавать какие-то переменные. И таким образом программа съэкономит ОЗУ.
UPD2:
Однако учтите, что создание динамической переменной или массива в куче довольно затратная по времени операция (по сравнению с созданием стековой или статической переменной). Поэтому к этому вопросу надо подходить творчески и соблюдать баланс между экономией ОЗУ и быстродействием программы.