Почему у диалогового класса нет деструтора?
От: Constructor  
Дата: 28.08.02 06:41
Оценка:
Здравствуйте!
Почему у диалогового класса нет деструтора? В какой момент мне освобождать динамически выделенную память (например, при нажатии на кнопку выделяю кусок)? Если дописать деструктор, то объявлять ли его виртуальным?
Re: Почему у диалогового класса нет деструтора?
От: Nikto Россия  
Дата: 28.08.02 06:43
Оценка:
Здравствуйте Constructor, Вы писали:

C>Здравствуйте!

C>Почему у диалогового класса нет деструтора?
В какой момент мне освобождать динамически выделенную память (например, при нажатии на кнопку выделяю кусок)?

Например в OnClose()
Re[2]: Почему у диалогового класса нет деструтора?
От: Constructor  
Дата: 28.08.02 07:25
Оценка:
Здравствуйте Nikto, Вы писали:

N>Здравствуйте Constructor, Вы писали:


C>>Здравствуйте!

C>>Почему у диалогового класса нет деструтора?
N>В какой момент мне освобождать динамически выделенную память (например, при нажатии на кнопку выделяю кусок)?

N>Например в OnClose()


Не совсем верный ответ. OnClose() вызывается только если закрывать диалог кнопкой закрытия окна в правом верхнем углу. А при закрытии кнопакми ОК и Отмена — не вызывается. Наверное, лучше OnDestroy().
Re[3]: Почему у диалогового класса нет деструтора?
От: Nikto Россия  
Дата: 28.08.02 07:26
Оценка:
Здравствуйте Constructor, Вы писали:

C>Здравствуйте Nikto, Вы писали:


N>>Здравствуйте Constructor, Вы писали:


C>>>Здравствуйте!

C>>>Почему у диалогового класса нет деструтора?
N>>В какой момент мне освобождать динамически выделенную память (например, при нажатии на кнопку выделяю кусок)?

N>>Например в OnClose()


C>Не совсем верный ответ. OnClose() вызывается только если закрывать диалог кнопкой закрытия окна в правом верхнем углу. А при закрытии кнопакми ОК и Отмена — не вызывается. Наверное, лучше OnDestroy().


В яблочко! А зачем тогда спрашивал?
Re[4]: Почему у диалогового класса нет деструтора?
От: Constructor  
Дата: 28.08.02 07:31
Оценка: -1
Здравствуйте Nikto, Вы писали:

N>Здравствуйте Constructor, Вы писали:


C>>Здравствуйте Nikto, Вы писали:


N>>>Здравствуйте Constructor, Вы писали:


C>>>>Здравствуйте!

C>>>>Почему у диалогового класса нет деструтора?
N>>>В какой момент мне освобождать динамически выделенную память (например, при нажатии на кнопку выделяю кусок)?

N>>>Например в OnClose()


C>>Не совсем верный ответ. OnClose() вызывается только если закрывать диалог кнопкой закрытия окна в правом верхнем углу. А при закрытии кнопакми ОК и Отмена — не вызывается. Наверное, лучше OnDestroy().


N>В яблочко! А зачем тогда спрашивал?


Я был удивлен, почему нет деструктора у класса, наследованного от CDialog. Сначала немного растерялся. Мне интересно, почему я должен освобождать память в OnDestroy(), а не в деструкторе.
Re[5]: Почему у диалогового класса нет деструтора?
От: Mink Россия  
Дата: 28.08.02 07:57
Оценка:
Здравствуйте Constructor, Вы писали:

...

C>Я был удивлен, почему нет деструктора у класса, наследованного от CDialog. Сначала немного растерялся. Мне интересно, почему я должен освобождать память в OnDestroy(), а не в деструкторе.


А что значит нет деструктора? У класса CObject определен виртуальный деструктор и вроде как это гарантирует наличие деструктора у всех производных классов.
Сила, она в ньютонах
Re[3]: Почему у диалогового класса нет деструтора?
От: Demon Россия  
Дата: 02.09.02 14:27
Оценка: 12 (2)
Здравствуйте Constructor, Вы писали:

C>Здравствуйте Nikto, Вы писали:


N>>Здравствуйте Constructor, Вы писали:


C>>>Здравствуйте!

C>>>Почему у диалогового класса нет деструтора?
N>>В какой момент мне освобождать динамически выделенную память (например, при нажатии на кнопку выделяю кусок)?

N>>Например в OnClose()


C>Не совсем верный ответ. OnClose() вызывается только если закрывать диалог кнопкой закрытия окна в правом верхнем углу. А при закрытии кнопакми ОК и Отмена — не вызывается. Наверное, лучше OnDestroy().

Все выше описанное не то чтоб неверно, но нежелательно.
Например при следующем использовании:
CMyDialog dlg;
while(dlg.DoModal()!=IDOK);

конструктор будет вызван только один раз, а OnDestroy() может вызываться много раз. Результат думаю очевиден.
И вообще:
если выделяешь память в конструкторое — очищай в деструкторе
если выделяешь память в OnInitDialog() — очищай в OnDestroy().
Re: Почему у диалогового класса нет деструтора?
От: Bell Россия  
Дата: 03.09.02 13:53
Оценка:
Здравствуйте Constructor, Вы писали:

C>Здравствуйте!

C>Почему у диалогового класса нет деструтора? В какой момент мне освобождать динамически выделенную память (например, при нажатии на кнопку выделяю кусок)? Если дописать деструктор, то объявлять ли его виртуальным?

Допиши деструктор ручками, и все. Виртуальным его объявлять необязательно (но если очень хочется, то можно), поскольку вполне достаточно того, что в базовом классе (CObject) деструктор объявлен виртуальным.
Любите книгу — источник знаний (с) М.Горький
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.