Вниз
Скачать: CL | DM;

Удаление элемента из динамического массива   Найти похожие ветки 

← →
Alexey   (2009-08-26 16:55) [0]

Господа, добрый день!
Подскажите пожалуйста, как правильно удалить элемент из динамического массива?

Спасибо!


← →
Anatoly Podgoretsky ©   (2009-08-26 17:04) [1]

> Alexey  (26.08.2009 16:55:00)  [0]

Удалить нельзя, можно только укоротить массив.


← →
clickmaker ©   (2009-08-26 17:17) [2]

присвоить что-то, что будет означать недействительность элемента.
Если это невозможно, тогда только укорачивание со сдвигом остальных элементов


← →
KSergey ©   (2009-08-26 17:27) [3]

можно использовать TList и наследников.


← →
Alexey   (2009-08-26 19:34) [4]


> Если это невозможно, тогда только укорачивание со сдвигом
> остальных элементов
>

да вот я только так пока и думал, честно говоря


> можно использовать TList и наследников.

хм...
задумался, спасибо!


← →
Alexey   (2009-08-26 19:52) [5]


> KSergey ©

А можно маленькую подсказочку, как мне в TList добавить элемент своего типа?


← →
Ruzzz   (2009-08-26 20:20) [6]

Можно поискать в папке исходников, которые идут с Delphi, строку " = class(TList)" по маске "*.pas", и посмотреть примеры


← →
Anatoly Podgoretsky ©   (2009-08-26 20:23) [7]

> Alexey  (26.08.2009 19:52:05)  [5]

TList - это список нетипизированых указателей


← →
Ruzzz   (2009-08-26 20:40) [8]

Тут стоит обратить внимание на:
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;


← →
Alexey   (2009-08-26 23:09) [9]

Спасибо!


← →
Alexey   (2009-08-26 23:10) [10]

Можно тему закрывать.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.017 c
2-1251711913
Tinky
2009-08-31 13:45
2009.10.25
Проверить integer на вхождение во множество


15-1251459961
Наиль
2009-08-28 15:46
2009.10.25
Лишние символы при исполнении bat-файла


2-1251965130
ford
2009-09-03 12:05
2009.10.25
TWebBrowser список ссылок ячейки таблицы


3-1228563453
Антон_207
2008-12-06 14:37
2009.10.25
курсовая


2-1251814973
Del
2009-09-01 18:22
2009.10.25
BDS 2006 hint




   Наверх