![]() |
|
Модераторы: bsa |
![]()
|
|
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Я как бы доделываю чужой проект. Там сделаны свои визуальные компоненты, т.е. интерфейс. Используется шаблон ControlsFactory. При инициализации приложения создаются все нужные контролы, и они соответственно хранятся в объекте класса ControlsFactory.
Сегодня я обнаружил, что из под них не освобождается память. Везде в классах контролов заполнил деструкторы, где это было необходимо. Ну и соответственно в деструкторе ControlsFactory прописал удаление всех контролов. Потом поставил на всё это дело брекпойнты и обнаружил, что ни в один из деструкторов управление не попадает! И вот сейчас я в думках. Это такая особенность MS VS 2005 - "нет брякам в деструкторах", или это я где-то недописал глобальный delete, который и спровоцирует удаление всего и вся? Я до этого не программировал в MS VS 2005, и с шаблонами дела не имел. Так что сильно не пинайте. -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 8 Всего: 56 |
нет такого, твоя вина что не попадает, ищи ошибку |
|||
|
||||
| ksili |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Я так и предполагал, поэтому пытаюсь найти, чего не хватает.
У меня есть класс GUI, который содержит все основные обеъкты. Вот его объявление:
Функция GUI::Init вызывается из основного юнита проекта в InitInstance, перед ShowWindow. В ней инициализируются все члены класса GUI и pControlsFactory заполняется контролами. Соответственно я предположил, что не хватает деструктора класса GUI, в котором бы все это удалялось, а он бы вызывался, когда приложение уничтожается (WM_CLOSE). Но не всё так просто. Деструктор я добавил:
Пытаюсь его вызвать
Ошибка - error C2352: 'GUI::~GUI' : illegal call of non-static member function Если перед объявлением прописать static, то добавляется ошибкаerror C2574: 'GUI::~GUI(void)' : cannot be declared static Как же мне вызвать этот деструктор? Или я вообще не то делаю? -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
а десктруктор какого объекта хотите вызвать, если объекта и не упоминаете ? ну а вобше деструктор вызывать напрямую нежелательно, он сам вызовится когда объект будет удален.
|
|||
|
||||
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
mes, я уже и сам понял, что объекта-то и нету
Но я уже нашёл выход. Там где хотел вызвать деструктор, просто вместо этого прописал его код, благо он небольшой. Но теперь другая проблема. Делаю проход по списку контролов, чтобы их удалить, но чё-то на первом же контроле все сыпется:
Это сообщение отредактировал(а) ksili - 1.12.2008, 14:10 -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Похоже там списке контрол какой-то косячный.
Ладно, вопрос по теме решён, так что помечаю как решённый. -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Проверь, возможно, у базового класса деструктор не помечен виртуальным. В этом случае, деструкторы потомков вызываться не будут, если удалять объект по указателю на базовый класс:
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |