ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 10) онлайн

Операция delete

Если ваша программа резервирует много участков памяти, используя операцию new, то в конце концов все возможное пространство памяти будет занято и систе- ма рухнет. Для того чтобы избежать этого и эффективно использовать память,

 

используется операция delete. Она предназначена для освобождения выделен- ных участков памяти, возвращая их операционной системе. В примере NEWINTRO строка

delete [ ] ptr;

возвращает системе память, на которую указывал указатель ptr.

На самом деле в последнем примере нам не нужна эта операция, так как па- мять автоматически освобождается после завершения работы программы. Одна- ко предположим, что мы используем операцию new в функции. Если функция использует локальную переменную как указатель на память, выделенную с ис- пользованием new, то указатель будет уничтожен по окончании работы функ- ции, но память останется выделенной и при этом недоступной из программы. Поэтому освобождение памяти после того, как она была использована и больше не требуется, является хорошим тоном, а зачастую и просто необходимо.

Освобождение памяти не подразумевает удаление указателя, связанного с этим блоком памяти; это и не изменение адреса значения, на которое указывает ука- затель. Однако этот указатель не имеет силы; память, на которую он указывает, может быть применена для других целей. Поэтому будьте внимательны и не ис- пользуйте указатели на освобожденную память.

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

ptr = new SomeClass; // создаем один объект

delete ptr;          // скобок не требуется

Однако при освобождении памяти, занимаемой массивом, скобки обязатель- ны. Их использование подразумевает, что мы освобождаем память, использу- емую для всех членов массива, одновременно.

 

26