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


Пример размещения динамического объекта - часть 2


|

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 удаляется, и процесс продолжается до полного очищения списка.




- Начало -  - Назад -  - Вперед -



Книжный магазин