Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.047 c
3-1089889541
ydv
2004-07-15 15:05
2004.08.08
Клиент-сервер


11-1078383184
Ricko
2004-03-04 09:53
2004.08.08
Плагины для Round_Watch


4-1088166460
Дмитрий2004
2004-06-25 16:27
2004.08.08
Как можно узнать FPS


3-1089911309
kaif
2004-07-15 21:08
2004.08.08
Не работают Lookup-поля, если есть поля вида fkInternalCalc !


14-1090233197
Dmitrij_K
2004-07-19 14:33
2004.08.08
Мона ли ставить на одной машине несколько Дельфей





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский