позволяют выделить и сделать доступным свободный участок в основной памяти, размеры которого соответствуют типу данных, определяемому именем типа. В выделенный участок заносится значение, определяемое инициализатором, который не является обязательным элементом. В случае успешного выполнения операцияnew возвращает адрес начала выделенного участка памяти. Если участок нужных размеров не может быть выделен (нет памяти), то операцияnew возвращает нулевое значение адреса (NULL).
Здесь необязательный инициализатор - это выражение в круглых скобках, значением которого заполняется выделенная область памяти. Указатель, которому присваивается получаемое значение адреса, должен относиться к тому же типу данных, что и имя_типа в операцииnew.Примеры:
· операция new float выделяет участок памяти размером 4 байта;
· операция new int(l5) выделяет участок памяти в 2 байта и инициализирует этот участок целым значением 15.
Напомним, что определение указателя имеет вид: тип *<имя указателя>; .Имя указателя - это идентификатор. Таким образом, int *h; - определение указателя h, который может быть связан с участком памяти, выделенным для величины целого типа. Введя с помощью определения указатель, можно присвоить ему возвращаемое операциейnew значение:
h = new int(15);.
В дальнейшем доступ к выделенному участку памяти обеспечивает выражение *h.
В случае отсутствия в операцииnew инициализатора значение, которое заносится в выделенный участок памяти, не определено. Если в качестве имени типа в операцииnew используется массив, то для массива должны быть полностью определены все размерности. Инициализация участка памяти, выделяемого для массива, запрещена.
Продолжительность существования, выделенного с помощью операции new участка памяти - от точки создания до конца программы или до явного его освобождения.
Для явного освобождения, выделенного операцией new участка памяти, используется оператор delete, общий вид которого следующий:
delete <указатель>; , где
указатель адресует освобождаемый участок памяти, ранее выделенный с помощью операции new. Например: delete h; освободит участок памяти, связанный с указателем h. Повторное применение операции delete к тому же указателю дает неопределенный результат.
Для освобождения памяти, выделенной для массива, используется следующая модификация того же оператора: delete[ ] <указатель>;, где указатель связан с выделенным для массива участком памяти.