Можно ли назначить динамическую память или распределение переменной вместо указателя? например int my_var= new int
, а также удалить его позже?C++ | Установить динамическую память в переменную?
ответ
выделение памяти позаботится, если вы просто написать:
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 указатель, возвращаемый новый пустой указатель, и программа продолжает выполнение нормально.
Отличный ответ, особенно «новая (некрасивая)» деталь. – Bathsheba
Нет, вы не можете. new int
возвращает int*
, а поведение при его отливке до int
не определено.
Если вы не любите явные указатели, вы могли бы написать typedef int* int_ptr;
и использовать int_ptr my_var = new int;
И да, вы должныdelete my_var
в какой-то момент.
Не является указателем переменной? Думаю, вам нужно быть более конкретным. – m02ph3u5