Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Перестал работать Деструктор (число прочтений - 4688 )
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Перестал работать Деструктор
10. Ноября 2007 :: 14:28
Печать  
Ни в одном классе не срабатывает.
Это только у меня или нет?
Началось несколько дней назад. Последний ночник 2.5 - ситация та же.
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перестал работать Деструктор
Ответ #1 - 10. Ноября 2007 :: 14:48
Печать  
Уточню. Деструктор не срабатывает для классов-перехватчиков. Для обычных классов - номано.
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перестал работать Деструктор
Ответ #2 - 10. Ноября 2007 :: 15:03
Печать  
Собрал на тестовой базе - все срабатывает.
На боевой не работает Печаль
  
Наверх
 
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Перестал работать Деструктор
Ответ #3 - 10. Ноября 2007 :: 17:02
Печать  
Значит где-то остается живая ссылка на этот объект, поэтому и не происходит уничтожения объекта.

Где может жить эта ссылка?
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перестал работать Деструктор
Ответ #4 - 10. Ноября 2007 :: 17:14
Печать  
sedmin писал(а) 10. Ноября 2007 :: 17:02:
Значит где-то остается живая ссылка на этот объект, поэтому и не происходит уничтожения объекта.

Где может жить эта ссылка?

Упс. Порой одного слова достаточно, чтобы понять где косяк.
С ТП сразу стало ясно. ТП в текущей редакции уничтожится только после закрытия формы.

С Перехватчиками так и не понял откуда ноги растут. В каких то случаях Деструктор срабатывает, а в каких то нет Печаль
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перестал работать Деструктор
Ответ #5 - 14. Ноября 2007 :: 08:53
Печать  
Ищи и как обычно, жду тест Улыбка
Мои тесты для деструкторов Перехватчиков работают нормально Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перестал работать Деструктор
Ответ #6 - 14. Ноября 2007 :: 09:03
Печать  
artbear писал(а) 14. Ноября 2007 :: 08:53:
Ищи и как обычно, жду тест Улыбка
Мои тесты для деструкторов Перехватчиков работают нормально Улыбка

Если бы тест так легко было сделать, я бы давно отослал Печаль
Косяк возникает не в 100% случаях, а в извращенных вариантах. Например деструктор класса ТП, когда переменная ТП хранится в классе перехватчике и я просто закрываю форму, а не обнуляю эту переменную. В общем попытаюсь сделать тест, но не уверен.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перестал работать Деструктор
Ответ #7 - 14. Ноября 2007 :: 09:35
Печать  
Форму как закрываешь?
Через Форма.Закрыть() ? или через Система.ЗакрытьФорму(КонтФормы) ?
ИМХО наверняка через первый вариант.
Попробуй использовать второй вариант.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перестал работать Деструктор
Ответ #8 - 14. Ноября 2007 :: 09:36
Печать  
Просто выхожу из формы
Кнопка Закрыть  Смех
  
Наверх
 
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Перестал работать Деструктор
Ответ #9 - 15. Ноября 2007 :: 04:58
Печать  
Arta писал(а) 14. Ноября 2007 :: 09:03:
когда переменная ТП хранится в классе перехватчике и я просто закрываю форму, а не обнуляю эту переменную. В общем попытаюсь сделать тест, но не уверен.

Вот и получаются, скорее всего, цикличные ссылки. Попробуй их очищать в ПриЗакрытии().
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перестал работать Деструктор
Ответ #10 - 15. Ноября 2007 :: 08:16
Печать  
Саш, я уже готовлю потихоньку тест.
Я пробовал конечно же в ПриЗакрытии обнулять. Возникает вопрос, откуда берутся циклические ссылки, если форма закрыта, а все переменные с классами ТП были локальными. Я весь мозх съел Печаль
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перестал работать Деструктор
Ответ #11 - 07. Декабря 2007 :: 15:09
Печать  
Возвращаясь к этой теме...

Предположим есть МойКлассТП::ТабличноеПоле

Создаю
Код
Выбрать все
МоеТП = _Форма.СоздатьЭлементУправленияНаФорме(Форма, "МойКлассТП", "АтрибутТП"); 



Далее делаю МоеТП = "", деструктор класса не срабатывает.
Если же сделаю
Код
Выбрать все
МоеТП = "";
МоеТП = _Форма.СоздатьЭлементУправленияНаФорме(Форма, "МойКлассТП", "АтрибутТП");
 


То деструктор сработает. Иными словами класс уничтожается только при пересоздании объекта на базе этого атрибута.
Такое поведение несколько напрягает, так как после МоеТП = "" ссылка на объект где-то сохраняется.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перестал работать Деструктор
Ответ #12 - 07. Декабря 2007 :: 15:49
Печать  
Случайно код
Код
Выбрать все
МоеТП = "";
_Форма = 0; 


не поможет?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перестал работать Деструктор
Ответ #13 - 07. Декабря 2007 :: 15:52
Печать  
К тому времени как я делаю МоеТП = "", _Форма уже давно убита.
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перестал работать Деструктор
Ответ #14 - 07. Декабря 2007 :: 16:10
Печать  
Тест отправил.


P.S. Звиняйте что без багзиллы Улыбка Как только подтвердишь баг - заявлю Улыбка
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать