![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Удаление элемента из динамического массива
Alexey © (2009-08-26 16:55:00)Господа, добрый день!
Подскажите пожалуйста, как правильно удалить элемент из динамического массива?
Спасибо!
Alexey (2009-08-26 23:10:00) [1]Можно тему закрывать.
Alexey (2009-08-26 23:09:00) [2]Спасибо!
Ruzzz (2009-08-26 20:40:00) [3]Тут стоит обратить внимание на:
procedure Notify(Ptr: Pointer; Action: TListNotification); virtual
Clear, вызывает SetCount(0), который вызывает Delete, Remove также вызывет Delete, сам Delete вызывает Notify, т.е. все предусмотрено для корректного удаления.
Переопределять можно примерно так:
procedure Notify(Ptr: Pointer; Action: TListNotification); override;
procedure TMyList.Notify(Ptr: Pointer; Action: TListNotification);
begin
if Action = lnDeleted then begin
TMyListElement(Ptr).Free // или если у нас не класс а структура то
SetLength( PMyListElement(Ptr)^.Str, 0); // не забываем удалять строки и дин. массивы в структуре
Dispose(Ptr);
end;
inherited Notify(Ptr, Action);
end;
Anatoly Podgoretsky (2009-08-26 20:23:00) [4]> Alexey (26.08.2009 19:52:05) [5]
TList - это список нетипизированых указателей
Ruzzz (2009-08-26 20:20:00) [5]Можно поискать в папке исходников, которые идут с Delphi, строку " = class(TList)" по маске "*.pas", и посмотреть примеры
Alexey (2009-08-26 19:52:00) [6]
> KSergey ©
А можно маленькую подсказочку, как мне в TList добавить элемент своего типа?
Alexey (2009-08-26 19:34:00) [7]
> Если это невозможно, тогда только укорачивание со сдвигом
> остальных элементов
>
да вот я только так пока и думал, честно говоря
> можно использовать TList и наследников.
хм...
задумался, спасибо!
KSergey (2009-08-26 17:27:00) [8]можно использовать TList и наследников.
clickmaker (2009-08-26 17:17:00) [9]присвоить что-то, что будет означать недействительность элемента.
Если это невозможно, тогда только укорачивание со сдвигом остальных элементов
Anatoly Podgoretsky (2009-08-26 17:04:00) [10]> Alexey (26.08.2009 16:55:00) [0]
Удалить нельзя, можно только укоротить массив.