Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / как работает деструктор ? / 8 сообщений из 8, страница 1 из 1
20.09.2004, 14:29
    #32702411
black zorro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как работает деструктор ?
фишка в том, что у меня в BCB5 есть собственные два компонента класса
текстовых поля
TColoredTextField
и производный от него
TColoredDBEdit
в коде деструктора для TColoredDBEdit:

Код: plaintext
1.
2.
3.
4.
__fastcall TColoredDBEdit::~TColoredDBEdit(void){
 ShowMessage ("Before Delete");
 TColoredTextField::~TColoredTextField ();
}

в коде деструктора для текстового поля:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 __fastcall TColoredTextField::~TColoredTextField (void){
 ShowMessage ("Text Before Delete");
 if (FLabel != NULL){
  delete FLabel;
  FLabel = NULL;
 }
 ShowMessage ("Stage 1");
 if (FEdit != NULL){
  delete FEdit;
  FEdit = NULL;
 }
 ShowMessage ("Stage 2");
}
создаю форму бросаю на него этот редактор (TColoredDBEdit:) и пытаюсь удалить его в ходе чего получаю бесконечное множество месагабоксов: "Before Delete" типа зациклился, но сколько не смотрю не могу понять где здесь цикл возможен то, может выши свежие глаза подскажут.
примечаение добавление и удаление с формы TColoredTextField работает без проблем.
...
Рейтинг: 0 / 0
20.09.2004, 14:33
    #32702428
zalexaka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как работает деструктор ?
TColoredTextField::~TColoredTextField ();
вот это круто !!! :)
...
Рейтинг: 0 / 0
20.09.2004, 14:34
    #32702434
zalexaka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как работает деструктор ?
уберите и деструктора TColoredDBEdi
TColoredTextField::~TColoredTextField ();
и наслаждайтесь
...
Рейтинг: 0 / 0
20.09.2004, 14:38
    #32702449
black zorro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как работает деструктор ?
автор
ColoredTextField::~TColoredTextField ();

бывает, хотя стоп, тогда вопрос в догонку я ведь здесь просто напросто
вызвал деструктор предка два раза почему же получается бесконечный цикл вызова именно деструктора потомка?
...
Рейтинг: 0 / 0
20.09.2004, 14:43
    #32702461
zalexaka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как работает деструктор ?
__fastcall virtual ~TComponent(void);
сия строчка о чём говорит ???
...
Рейтинг: 0 / 0
20.09.2004, 14:49
    #32702485
black zorro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как работает деструктор ?
автор
__fastcall virtual ~TComponent(void);
сия строчка о чём говорит ???

в том что у компонента базового класса моего едита есть виртуальный деструк тор и в случае вызова:
Код: plaintext
1.
2.
 TColoredTextField * f  = new TColoredDBEdit (this);
 delete f;
сработает вызов деструктора именно для TColiredDBEdit
но деструктор работает ведь как: вызывается деструктор объекта TColoredDBEdit он уничтожает специфическое именно для себя как наследника потом неявно вызывается деструктор для TColoredTextField и так поцепочке выполняется раскрутка до TObject.
я в теле деструктора для TColredDBEdit явно вызываю деструктор предка не пишу же я ведь
Код: plaintext
1.
 delete this;
...
Рейтинг: 0 / 0
20.09.2004, 14:53
    #32702493
zalexaka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как работает деструктор ?
black zorro автор
__fastcall virtual ~TComponent(void);
сия строчка о чём говорит ???

в том что у компонента базового класса моего едита есть виртуальный деструк тор и в случае вызова:
Код: plaintext
1.
2.
 TColoredTextField * f  = new TColoredDBEdit (this);
 delete f;
сработает вызов деструктора именно для TColiredDBEdit
но деструктор работает ведь как: вызывается деструктор объекта TColoredDBEdit он уничтожает специфическое именно для себя как наследника потом неявно вызывается деструктор для TColoredTextField и так поцепочке выполняется раскрутка до TObject.
я в теле деструктора для TColredDBEdit явно вызываю деструктор предка не пишу же я ведь
Код: plaintext
1.
 delete this;

т.е. вы считаете хорошим тоном дважды вызывать дестуктор для одного объекта, я вас правильно понял?
...
Рейтинг: 0 / 0
20.09.2004, 15:04
    #32702542
black zorro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как работает деструктор ?
нет, нет, и еще раз нет, то был глюк и все, закрыли вопрос.
меня более волнует вопрос почему был бесконечный цикл.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / как работает деструктор ? / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]