Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Колекции

Автор: Bokul 21.11.2006 11:44

Как правильно уничтожить экземпляр PStringCollection, каждый элемент которого есть указателем на строку (создаётся с помощью newstr)?

Автор: klem4 21.11.2006 12:04

Это в каком из 16б паскалей такое есть ? blink.gif

Автор: volvo 21.11.2006 16:22

В Турбо Паскале есть... TurboVision вообще на коллекциях построен...

Bokul,

Dispose(my_collection_ptr, Done);

Все содержимое удаляет сам деструктор...

Автор: Bokul 22.11.2006 11:07

Спасибо.
А как быть с TCollection? Также само просто вызвать деструктор или же сначала надо пробежаться по коллекции, чтобы "вручную" вернуть занятую ее элементами память назад в кучу, и только потом уничтожать сам экземпляр TCollection?

Автор: volvo 22.11.2006 15:58

Переопредели FreeItem так, чтобы он мог удалить айтемы твоего типа (если они - НЕ наследники TObject). Вот что об этом говорится в Help-е:

Цитата(TP Help)
TCollection.FreeItem method:
Descendant collection objects that don't use descendants of TObject as their items, such as string collections, must override FreeItem to dispose of the given Item.

Автор: Bokul 23.11.2006 7:44

Цитата
such as string collections

Так я не понял для коллекции строк надо переопределять FreeItem или нет?
Вот исходник этого метода:

procedure TStringCollection.FreeItem(Item: Pointer);
begin
DisposeStr(Item);
end;


Он же вроде сам все что нужно делает...

Автор: volvo 23.11.2006 13:22

А я не понял, о чем ты спрашиваешь... Выше был вопрос о TCollection... Это - абстрактная коллекция, элементы которой удаляются самостоятельно ТОЛЬКО тогда, когда они - наследники TObject... Теперь ты вдруг говоришь о TStringCollection, которая в принципе предназначена для работы со строками, было бы странно, если бы она эти строки не удаляла сама...

Автор: Bokul 24.11.2006 4:41

Цитата
TStringCollection, которая в принципе предназначена для работы со строками, было бы странно, если бы она эти строки не удаляла сама...

Ну да, я так и думал. Меня запутала цитата из справки, которою ты привел - such as string collections , я думал тут имеется ввиду TStringCollection...