Главная страница
    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.033 c
1-1090495879
Димон
2004-07-22 15:31
2004.08.08
Быстро грузить текстовые файлы порядка 10 метров


3-1089558438
Johnny Raw
2004-07-11 19:07
2004.08.08
EDBEngineError


6-1086618036
Adil
2004-06-07 18:20
2004.08.08
Ошибка 503


4-1088188305
Timyrlan
2004-06-25 22:31
2004.08.08
Получить сообщение другому приложению


1-1090860755
Shturmovik
2004-07-26 20:52
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский