Форум: "Основная";
Текущий архив: 2004.08.08;
Скачать: [xml.tar.bz2];
ВнизУничтожение всех объектов данного класса Найти похожие ветки
← →
Jaxtor © (2004-07-23 10:58) [0]Господа мастера!
Помогите, пожалуйста!
Возможно ли с помощью одной процедуры или функции уничтожить все объекты данного класса?
← →
begin...end © (2004-07-23 11:01) [1]Стандартной нету, ИМХО. Но можно и самому написать.
← →
Sergey Kaminski © (2004-07-23 11:03) [2]О том, чтобы это было возможно, нужно позаботится на этапе создания этих объектов.
← →
Jaxtor © (2004-07-23 11:03) [3]>begin...end © (23.07.04 11:01) [1]
Спасибо.
← →
han_malign © (2004-07-23 11:04) [4]Только если это TComponent, в принципе...- если у него/их Owner нормальный...
Либо в Create объекта есть занесение его в глобальный список(и, соотвенственно, в Destroy - "вынесение"), к которому есть доступ из этой "одной процедуры или функции"...(для списка - в аккурат TObjectList)
← →
Jaxtor © (2004-07-23 11:09) [5]Нет, у меня потомок от TObject.
← →
Sergey Kaminski © (2004-07-23 11:15) [6]Jaxtor © (23.07.04 11:09) [5]
Тогда только занесением в список при создании
← →
Jaxtor © (2004-07-23 11:17) [7]>Sergey Kaminski © (23.07.04 11:15) [6]
Класса TList, например?
← →
ЮЮ © (2004-07-23 11:23) [8]TObjectList,будет проще. Достаточно Create(true), тогда для удаления всего списка просто Clear
← →
Anatoly Podgoretsky © (2004-07-23 11:24) [9]Jaxtor © (23.07.04 11:17) [7]
[4]
← →
Анонимщик © (2004-07-23 11:25) [10]Усложним задачу. Пусть дано требование ни в какие списки никаких указателей не вносить. Тогда есть решение?
← →
Jaxtor © (2004-07-23 11:32) [11]>Анонимщик © (23.07.04 11:25) [10]
У меня как раз в список заносятся указатели! Я просто хочу очистить дерево.
← →
Sergey Kaminski © (2004-07-23 11:35) [12]Так в чем проблема-то?
← →
han_malign © (2004-07-23 11:36) [13]примерно так
...............
procedure DestroyAll;
implementation
var pObjects: TObjectList= nil;
procedure DestroyAll;
begin
if(pObjects<>nil)then //на всякий случай
while(pObjects.Count>0)do pObjects[pObjects.Count-1].Free;{объект сам удаляет себя из списка}
end;
..........
constructur TMyObject.Create;
begin
inherited;
..........
if(pObjects<>nil)then pObject.Add(self);
end;
destructor TMyObjects.Destroy;
begin
if(pObjects<>nil)then pObjects.Remove(self);
..............
inherited;
end;
........
initialization
pObjects:=TObjectList.Create;
pObjects.OwnsObjects:=false;
finalization
DestroyAll;
pObjects.Free;
end.
- в pObjects[pObjects.Count-1].Free - индекс (pObjects.Count-1) используется для того, чтобы не делались Move (если удалять pObjects[0].Free - то каждый раз будет Move(Items[1],Items[0],(Count-1)*sizeof(Items[0])))
>Усложним задачу. Пусть дано требование ни в какие списки никаких указателей не вносить. Тогда есть решение?
- искать в куче выделенные блоки памяти, проверять InstanceSize и адрес VMT, если совпадает, вычислять адрес экземпляра и освобождать - но это из серии "искать приключений на свою задницу" - для законченных садомазохистов...
← →
Anatoly Podgoretsky © (2004-07-23 11:37) [14]Анонимщик © (23.07.04 11:25) [10]
Если owner/parent у наследника нет то нет
← →
han_malign © (2004-07-23 11:38) [15]>У меня как раз в список заносятся указатели! Я просто хочу очистить дерево.
- дык, что - проблема по дереву пробежаться?
З.Ы. В этом случае, мой предыдущий выстрел - в молоко...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.08.08;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.033 c