C++ Программирование в среде С++ Builder 5



Операции распределения памяти - часть 2


Перегруженная версия new может быть, кстати, определена таким образом, что она не будет выделять никакой новой памяти, а будет использовать уже существующий объект. Адрес, где нужно разместить “новый” объект, должен быть одним из дополнительных параметров функции-операции. Эта форма new известна как синтаксис размещения (placement syntax).

Размещающая форма new полезна, если требуется вызвать конструктор класса для уже существующего объекта или организовать какую-то специальную схему управления памятью.

Операция delete имеет тип void, а ее параметр — void*.

Обработка ошибок

В C++ имеется библиотечная функция 5et_new_handler().Он будет вызываться при любой ошибке выделения памяти.

#include <stdlib.h>

#include <stdio.h>

#include <new.h>

void MyHandler(void)

{

prir-tf("No memory!\n");

exit(l) ;

}

int main(void) {

set_new_handler (MyHandler) ; //Установка обработчика.

return 0;

}

Обработчик ошибок new должен:

  • либо возвратить управление, освободив память;
  • либо вызвать abort () или exit ();
  • либо выбросить исключение bad_alloc или производного класса.
  • Заключение

    Теперь вы знаете о ряде конструкций языка C++, которые можно рассматривать в качестве модификаций старого С, не вносящих ничего принципиально нового. Принципиально новое начнется со следующей главы, где мы перейдем к классам и объектно-ориентированному программированию.




    Содержание  Назад