|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
08.01.2014, 13:06 | #1 |
Форумчанин
Регистрация: 14.12.2012
Сообщений: 668
|
Почему деструктор вызывается два раза?
Здравствуйте.
Столкнулся со странной проблемой, локализовал ее и не могу понять почему так происходит: Код:
|
08.01.2014, 13:23 | #2 |
Форумчанин
Регистрация: 14.12.2012
Сообщений: 668
|
Если добавить еще глобальную структуру, то получим:
Код:
|
08.01.2014, 14:50 | #3 |
Старожил
Регистрация: 19.08.2009
Сообщений: 2,119
|
220Volt
Как видно деструктор вызывается дважды. Сначала подумал баг (у меня gcc 4.8.1), попробовал запустить это код на онлайн компиляторе (clang 3.4) - результат тот же. как ты думаешь, сколько в этой программе создается объектов guarded_thread?
А вы почему со мной не соглашаетесь, у вас что, импотенция? (c) ACE Valery
|
08.01.2014, 14:54 | #4 |
Форумчанин
Регистрация: 14.12.2012
Сообщений: 668
|
|
08.01.2014, 15:05 | #5 |
Форумчанин
Регистрация: 14.12.2012
Сообщений: 668
|
Понял, я туплю, вопрос закрыт.
Последний раз редактировалось 220Volt; 08.01.2014 в 15:08. |
08.01.2014, 15:41 | #6 |
Форумчанин
Регистрация: 14.12.2012
Сообщений: 668
|
Я не за то зацепился, но вопросы остались:
Код:
|
08.01.2014, 18:06 | #7 |
Участник клуба
Регистрация: 23.12.2010
Сообщений: 1,129
|
А если переменную с потоком объявить локальной внутри main, поведение меняется?
|
08.01.2014, 18:29 | #8 | |
Форумчанин
Регистрация: 14.12.2012
Сообщений: 668
|
Цитата:
Код:
Не понятна мне логика - как завершение потока в main() влияет на остальные части программы? Ведь пока все потоки не завершатся ничего не должно быть разрушено. |
|
08.01.2014, 21:19 | #9 |
Участник клуба
Регистрация: 23.12.2010
Сообщений: 1,129
|
Нет. После выхода из main уничтожаются все глобальные/статические объекты, и программа завершает работу, независимо от того, что происходит в остальных потоках.
Подозреваю, что в твоем случае в главном потоке успевает уничтожиться какой-то важный для fltk глобальный или статический объект до вызова деструктора второго потока. А второй поток тем временем пытается создать окно, не может этого сделать и спокойно джойнится. |
08.01.2014, 21:59 | #10 | |
Форумчанин
Регистрация: 14.12.2012
Сообщений: 668
|
Цитата:
Код:
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Почему при перегруженных = и +, вызывается... | WebbMan | Общие вопросы C/C++ | 18 | 13.12.2012 01:15 |
Почему вызывается деструктор? | MrGukk | Общие вопросы C/C++ | 13 | 23.08.2012 17:42 |
Не вызывается деструктор | kineziz | Общие вопросы C/C++ | 4 | 18.08.2012 15:54 |
два раза к одной таблице | Kolik317 | SQL, базы данных | 2 | 26.12.2009 13:58 |
слово пишется два раза | INDY-SAVER | Microsoft Office Word | 2 | 18.11.2009 23:49 |