Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Операторы new и delete

Операторы языка C++ new и delete используются для выделения и освобождения блоков памяти. Область памяти, в которой размещаются эти блоки, известна как свободная память. Оператор new описывает типы данных. Затем выделяется блок памяти достаточной длины для размещения объекта описанного типа, и адрес блока возвращается как указатель на заданный тип данных. Блок памяти можно выделить для хранения объекта встроенного типа, например char, int или double, например:

char *PChar; //объявление указателя int *PInt; double *PDouble;PChar = new char; //размещение объекта в памяти Pint = new int; PDouble = new double;*PChar = 'а'; //присваивание значения*PInt = 5;*PDouble = 2.25;

Оператор new чаще всего используется для размещения в памяти данных определенных пользователем типов, например, структур:

struct Node {char *Name; int Value; Node *Next; }; //...Node *PNode; // объявить указательPNode = new Node; // разместить в памятиPNode->Name = "hello"; // присвоить значение PNode->Value = 1; PNode->Next = 0;

Если выделить требуемый объем памяти окажется невозможным, то будет возвращено значение 0. Следовательно, необходимо проверять указатель перед его использованием.

PNode = new Node; if (PNode == 0)// условие обработки ошибки... else// использование PNode...

Если блок памяти, выделенный оператором new, больше не используется, то его можно освободить с помощью оператора delete с указателем, содержащим адрес блока. Например, следующие операторы освобождают блоки памяти, выде­ленные в предыдущем примере:

delete PChar; delete Pint; delete PDouble; delete PNode;

Совет

Убедитесь, не вызывается ли оператор delete более одного раза с использованием одного адреса. Впрочем, удаление указателя, содержащего 0, всегда безобидно. Поэтому хорошим стилем программирования является установка указателя переменной в 0 сразу после использования оператора delete.

Операторы new и delete полезны для динамического создания объектов в памяти, особенно когда число или размер объектов неизвестны при компиляции. Кроме того, в отличие от глобального или локального объекта, можно точно управлять периодом жизни объекта, созданного оператором new. Глобально определенный объект остается в памяти на протяжении всего времени исполнения программы. Локально определенный объект существует, пока управление программы остается в блоке, в котором он определен. Объект же, созданный оператором new, может быть помещен в любую точку программы и освобожден в любой точке программы с использованием оператора delete.

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

Примечание

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

<== предыдущая лекция | следующая лекция ==>
Перегруженные функции | Инкапсуляция
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 298; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.014 сек.