Borland Pascal. Руководство пользователя


         

Динамически распределяемая область данных памяти


|
List | Node Node Node +-------+ +----+----+ +----+----+ +----+----+ | | | | | | | | | | | | | O--+----> | O | O-+---> | O | O-+----> | O | O-+---+ | | | | | | | | | | | | | | | | +-------+ +--+-+----+ +--+-+----+ +--+-+----+ | | | | | --+-- v v v --- | +-------------+ +-------------+ +-------------+ - | Name | | Name | | Name | | +-------------| +-------------| +-------------| | Title | | Title | | Title | | +-------------| +-------------| +-------------| | Rate | | Rate | | Rate | | +-------------| +-------------| +-------------| | | | | | | Сегмент | Динамически распределяемая область данных памяти (динамический) (статические| объекты) |
Рис. 9.2 Схема структур данных программы ListDemo.
Удаление сложной структуры данных из динамической памяти
Деструктор Staff.Done стоит того, чтобы рассмотреть его вни- мательно. Уничтожение объекта TStaffList включает удаление трех различных типов структур: полиморфических объектов рабочих струк- тур в списке, записей TNode, поддерживающих список, и (если он размещен в динамической памяти) объект TList, который озаглавли- вает список. Весь процесс запускается путем единственного вызова деструктора объекта TStaffList:
Staff.Done;
Код деструктора заслуживает более подробного изучения:
destructor StaffList.Done; var N: TNodePtr; begin while TNodes <> nil do begin N := TNodes; Disрose(N^.Item, Done); TNodes := N^.Next; Disрose (N); end; end;
Список очищается начиная с "головы" списка с помощью алго- ритма "из руки в руку", который до некоторой степени напоминает дерганье за веревку воздушного змея: два указателя (указатель TNodes внутри Staff и рабочий указатель N) изменяют свои ссылки в списке, тогда как первый элемент списка удаляется. Вызов процеду- ры Disрose освобождает память, занимаемую первым объектом TEmployee в списке (Item^), затем TNodes продвигается на следую- щую запись списка с помощью оператора TNodes := N^.Next, сама за- пись TNode удаляется, и процесс продолжается до полного очищения списка.

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