Операции 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)
//байтов памяти