Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C++ Builder > Не коректное удаление объэкта |
Автор: Sergio 29.4.2007, 23:40 | ||||||
Здраствуйте не могу корректно удалить экземпляр класса. Он удаляется, но "выбивает" ошибку. Почему? Какие решения этой проблемы? Вот как я делаю: File1.h
Fil1.cpp
Удаление:
|
Автор: Daevaorn 29.4.2007, 23:45 |
а просто delete почему не сделать? Раз есть new, значит должен быть и delete. Всё остальное - грабли. |
Автор: Xenon 29.4.2007, 23:50 |
Да, тут даже гадать не имеет смысла о всяких освобождениях памятии, про free. Просто delete используй. |
Автор: Sergio 29.4.2007, 23:53 | ||
Daevaorn, не "канает". Та же проблема |
Автор: Xenon 29.4.2007, 23:56 | ||
Мне еще этот фрагмент кода не нравится:
Зачем? |
Автор: Daevaorn 30.4.2007, 00:02 |
форма и другие компоненты кому-то пренадлежат, а значит их не нужно удалять вручную. это сделает владелец. а вообще-то с такими вопросами в другой раздел надо. |
Автор: Sergio 30.4.2007, 00:05 |
Xenon, хочу удалять объект через этот метод. Для читабильности сделал ![]() Daevaorn, без удаления формы, и других компонентов форма остаётся видимой. Я решыл проблему ![]() Добавлено через 9 минут и 7 секунд P.S. Как проверить удалился ли объэкт? |
Автор: Xenon 30.4.2007, 00:21 |
Кстати верно подметил zkv ... объекты же в обратном порядке должны удаляться. "пальцы ломают" не надо писать в ковычках ![]() Sergio, смотри тему снизу и получи овтет - никак ![]() |
Автор: archimed7592 30.4.2007, 01:44 |
Sergio, как только ты напишешь control.Parent = Form, управление временем жизни контрола берет на себя форма... удаляя контролы явно (delete бла-бла-бла) ты их действительно удаляешь, но, чуть позже, когда форма удаляется, она пытается их удалить во второй раз - здесь могут быть грабли... а может и не быть, если в деструкторе контрола он выписывает себя из состава формы - не помню как это в vcl реализовано... явные грабли здесь: this->~PrivateForm()... ты явно вызываешь деструктор... этого делать почти никогда не нужно... по крайней мере, делается это только при полном осозновании происходящего и при явной надобности этого... изначальная задача в билдере решается оч просто: form1 = new Form1 (); /* ... */; delete from1; никаких явных Close/деструкторов/удаления контролов НЕ НУЖНО... |