ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 10) онлайн
Операция delete
Если ваша программа резервирует много участков памяти, используя операцию new, то в конце концов все возможное пространство памяти будет занято и систе- ма рухнет. Для того чтобы избежать этого и эффективно использовать память,
используется операция delete. Она предназначена для освобождения выделен- ных участков памяти, возвращая их операционной системе. В примере NEWINTRO строка
delete [ ] ptr;
возвращает системе память, на которую указывал указатель ptr.
На самом деле в последнем примере нам не нужна эта операция, так как па- мять автоматически освобождается после завершения работы программы. Одна- ко предположим, что мы используем операцию new в функции. Если функция использует локальную переменную как указатель на память, выделенную с ис- пользованием new, то указатель будет уничтожен по окончании работы функ- ции, но память останется выделенной и при этом недоступной из программы. Поэтому освобождение памяти после того, как она была использована и больше не требуется, является хорошим тоном, а зачастую и просто необходимо.
Освобождение памяти не подразумевает удаление указателя, связанного с этим блоком памяти; это и не изменение адреса значения, на которое указывает ука- затель. Однако этот указатель не имеет силы; память, на которую он указывает, может быть применена для других целей. Поэтому будьте внимательны и не ис- пользуйте указатели на освобожденную память.
Квадратные скобки, следующие за операцией delete, означают, что мы осво- бождаем массив. При освобождении памяти, выделенной для одиночного объек- та, использования скобок не требуется.
ptr = new SomeClass; // создаем один объект
delete ptr; // скобок не требуется
Однако при освобождении памяти, занимаемой массивом, скобки обязатель- ны. Их использование подразумевает, что мы освобождаем память, использу- емую для всех членов массива, одновременно.
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
