2015-10-07 3 views
-4

Можно ли назначить динамическую память или распределение переменной вместо указателя? например int my_var= new int, а также удалить его позже?C++ | Установить динамическую память в переменную?

+0

Не является указателем переменной? Думаю, вам нужно быть более конкретным. – m02ph3u5

ответ

1

выделение памяти позаботится, если вы просто написать:

int n = 45; 

, но при использовании динамического распределения, вы должны использовать указатель и новый оператор, так что он может быть удален позже:

int * foo; 
foo = new int [5]; 

Если вы не хотите, чтобы ваша программа была завершена во время выделения из-за какого-то исключения, попробуйте использовать nothrow. Пример:

int * foo; 
foo = new (nothrow) int [5]; 
if (foo == nullptr) { 
// error assigning memory. Take measures. 
} 

используя nothrow указатель, возвращаемый новый пустой указатель, и программа продолжает выполнение нормально.

+0

Отличный ответ, особенно «новая (некрасивая)» деталь. – Bathsheba

1

Нет, вы не можете. new int возвращает int*, а поведение при его отливке до int не определено.

Если вы не любите явные указатели, вы могли бы написать typedef int* int_ptr; и использовать int_ptr my_var = new int;

И да, вы должныdelete my_var в какой-то момент.