![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
RomanEEP |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 18.5.2006 Где: Коломна Репутация: 5 Всего: 8 |
Процедура объекта ничем не отличается от обыкновенной процедуры (с тем отличием что у процедуры объекта есть скрытый параметр - указатель на объект располагающийся в регистре EAX). По поэтому из любой процедуры объекта можно беспрепятсвенно удалить объект. Просто нужно понимать, что после удаления указатель на объект недействителен и нельзя обращаться к полям, свойствам и методам объекта. Компилятор "автоматически" к ним НИКОГДА обращаться не будет, поэтому если в твоем коде нет обращений к данным объекта после удаления - все отлично работает. В большинстве событий объектов после вызова обработчика идет обращения к каким либо данным объекта, поэтому вызывать Free или Destroy внутри обработчика событий и не рекомендуется. Хотя вполне возможно.
Если форма не будет знать про TModul она В ПРИНЦИПЕ не сможет его удалить. Чудес не бывает. Нельзя удалить не зная что. Точнее можно, но результат будет непредсказуемый, это "плохой стиль програмирования"))) |
|||
|
||||
shmelina |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 5.6.2009 Репутация: нет Всего: нет |
А корректно ли будет у объекта TModul сделать обработчик события закрытия формы и выполнить Free?
|
|||
|
||||
RomanEEP |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 18.5.2006 Где: Коломна Репутация: 5 Всего: 8 |
Нет. Будет такая цепочка вызовов:
TForm.DoClose->TModul.FormClose->TModul.Destroy->TForm.Destroy после выполнения TForm.Destroy при возврате в TForm.DoClose результат один - AV |
|||
|
||||
shmelina |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 5.6.2009 Репутация: нет Всего: нет |
||||
|
||||
RomanEEP |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 18.5.2006 Где: Коломна Репутация: 5 Всего: 8 |
если точнее, то:
TForm.DoClose->TModul.FormClose->TModul.Free->TModul.Destroy->TForm.Free->TForm.Destroy хотя в нашем случае разницы нет |
|||
|
||||
shmelina |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 5.6.2009 Репутация: нет Всего: нет |
Т.е. ты предлагаешь в деструкторе формы удалять объект?
Тогда наверно можно так?
Это сообщение отредактировал(а) shmelina - 10.1.2010, 23:22 |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
Это сообщение отредактировал(а) bems - 11.1.2010, 04:34 -------------------- Обижено школьников: 8 |
|||
|
||||
shmelina |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 5.6.2009 Репутация: нет Всего: нет |
bems, спасибо за идею. Совсем забыл про это. Если по другому не получится - вернуть к ней.
То, что я написал в предыдущем посте, корректно? Теперь нужно в контейнере удалить этот объект. В общем у меня получилось так (тестовый проект):
Исходники прилагаю (delphi 2009). Посмотрите, пожалуйста. FastMM теперь молчит как партизан. Это сообщение отредактировал(а) shmelina - 11.1.2010, 09:38 Присоединённый файл ( Кол-во скачиваний: 3 ) ![]() |
||||||
|
|||||||
shmelina |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 5.6.2009 Репутация: нет Всего: нет |
Никто не ответил - ну и ладно. Главное помогли и все работает. Спасибо за помощь!
Наберу 100 сообщений - все поставлю плюсы ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |