Загрузка...

Операции new и delete


Операции new и delete выполняют динамическое распределение и отмену распределения памяти, аналогично, но с более высоким приоритетом, нежели стандартные библиотечные функции семейства malloc и free.

Упрощенный синтаксис:

указательимени = new имя <инициализаторимени>;

delete указательимени;

Имя может быть любого типа, кроме "функция, возвращающая…"(однако, указатели функций здесь допустимы). new пытается создать объект с типом "имени", распределив

(при возможности) sizeof(имя) байт в свободной области памяти (которую также называют "кучей"). Продолжительность существования в памяти данного объекта — от точки его создания и до тех пор, пока операция delete не отменит распределенную для него память, либо до конца работы программы.

В случае успешного завершения new возвращает указатель нового объекта. Пустой указатель означает неудачное завершение операции (например, недостаточный объем или слишком большая фрагментированность кучи). Как и в случае malloc, прежде чем пытаться обращаться к новому объекту, следует проверить указатель на наличие пустого значения. Возвращаемый указатель будет иметь правильный тип, "указатель имени", без необходимости явного приведения типов.

name *nameptr // name может иметь любой тип,

//кроме функции

if (!(nameptr = new name)) {

errmsg("Недостаточно памяти для name");

exit (1);

}

// использование *nameptr для инициализации объекта

//new name

delete nameptr; // удаление name и отмена

//распределения sizeof(name)

//байтов памяти

new, будучи ключевым словом, не нуждается в прототипе.
Загрузка...