Название: Вызов деструктора Отправлено: OKTA от Ноябрь 21, 2013, 17:19 Товарищи! Объясните пожалуйста! Почему в такой схеме, вроде простой на первый взгляд, сообщение DESTROYED то выводится в дебаг, то не выводится?
main.cpp Код: #include <QtGui/QApplication> mainy.h Код: #ifndef MAINY_H mainy.cpp Код: #include "mainy.h" Название: Re: Вызов деструктора Отправлено: Majestio от Ноябрь 21, 2013, 17:29 Попробуй так:
Код: mainy *mn = new mainy(&w); Название: Re: Вызов деструктора Отправлено: OKTA от Ноябрь 21, 2013, 17:31 the same :-\
Название: Re: Вызов деструктора Отправлено: mutineer от Ноябрь 21, 2013, 17:38 А как приложение завершаешь?
Название: Re: Вызов деструктора Отправлено: Majestio от Ноябрь 21, 2013, 17:40 the same :-\ Объяви внутри конструктора главного окна. По идее так правильнее. Название: Re: Вызов деструктора Отправлено: OKTA от Ноябрь 21, 2013, 17:44 А как приложение завершаешь? да просто крестиком окошко закрываю)Название: Re: Вызов деструктора Отправлено: OKTA от Ноябрь 21, 2013, 17:45 the same :-\ Объяви внутри конструктора главного окна. По идее так правильнее. Название: Re: Вызов деструктора Отправлено: Majestio от Ноябрь 21, 2013, 18:07 Не особо похоже на правильность) Вот не надо ля-ля Код: MainWindow::MainWindow(QWidget *parent) 100%-й вызов деструктора при закрытии Название: Re: Вызов деструктора Отправлено: OKTA от Ноябрь 21, 2013, 18:33 ну не создавать же мне все объекты в mainwindow теперь?))
Название: Re: Вызов деструктора Отправлено: Majestio от Ноябрь 21, 2013, 19:17 ну не создавать же мне все объекты в mainwindow теперь?)) Ради интереса попробовал самый первый вариант. Тож из 15 запусков - 15 выводов. Разница только в 1 "лишней" строчке: Код: class Mainy : public QObject Название: Re: Вызов деструктора Отправлено: Old от Ноябрь 21, 2013, 19:29 Вы про строку signals?
Она ничего не дает, в данном случае. Название: Re: Вызов деструктора Отправлено: Majestio от Ноябрь 21, 2013, 19:37 Вы про строку signals? Она ничего не дает, в данном случае. Ну да. Я просто сравнил - это единственное отличие. У меня все отрабатывает на ура. Название: Re: Вызов деструктора Отправлено: Old от Ноябрь 21, 2013, 19:48 Ну да. Я просто сравнил - это единственное отличие. У меня все отрабатывает на ура. Уберите ее, все будет продолжать работать.Название: Re: Вызов деструктора Отправлено: Majestio от Ноябрь 21, 2013, 19:59 Уберите ее, все будет продолжать работать. Будет работать, я в курсе :) Название: Re: Вызов деструктора Отправлено: OKTA от Ноябрь 21, 2013, 20:27 только вот на 4.7.4 то выдает, то не выдает DESTROYED ??? ??? ??? >:(
Название: Re: Вызов деструктора Отправлено: Old от Ноябрь 21, 2013, 20:32 только вот на 4.7.4 то выдает, то не выдает DESTROYED ??? ??? ??? >:( А если в конце qDebug добавить << flush?Название: Re: Вызов деструктора Отправлено: OKTA от Ноябрь 21, 2013, 20:34 только вот на 4.7.4 то выдает, то не выдает DESTROYED ??? ??? ??? >:( А если в конце qDebug добавить << flush?Название: Re: Вызов деструктора Отправлено: Old от Ноябрь 21, 2013, 20:36 А как это проявляется?
Название: Re: Вызов деструктора Отправлено: OKTA от Ноябрь 21, 2013, 20:41 ну так же, то есть в консоли фраза, то нет ???
Название: Re: Вызов деструктора Отправлено: Old от Ноябрь 21, 2013, 20:43 Попробуйте другой способ индикации. Например, создавайте файл.
Деструктор должен вызываться. Название: Re: Вызов деструктора Отправлено: Majestio от Ноябрь 21, 2013, 20:45 Без изменений... :-\ Для чистоты эксперимента добавьте (я про Qt 5.0.1, у вас там может быть иначе): Код: // .h - file Посмотрите, будет ли дебаг выливаться в файл. Название: Re: Вызов деструктора Отправлено: OKTA от Ноябрь 21, 2013, 20:52 Да, с файлом все работает)) Спасибо)) меньше буду верить просто qDebug Впредь)))) :D
Название: Re: Вызов деструктора Отправлено: Majestio от Ноябрь 21, 2013, 20:58 Да незашта. Но ситуация странная.
Название: Re: Вызов деструктора Отправлено: ViTech от Ноябрь 22, 2013, 00:11 А если так в деструкторе написать, тоже не всегда выводит?
Код И то же самое, но не подключая <QDebug>. Название: Re: Вызов деструктора Отправлено: Alex Custov от Ноябрь 22, 2013, 13:14 попробуй setbuf(stderr, 0); в начале main()
Название: Re: Вызов деструктора Отправлено: OKTA от Ноябрь 22, 2013, 20:04 ни так, ни так не помогает :D
у меня такое ощущение, что это связано с отсутствием у qDebug штуки flush. Может такое быть? Название: Re: Вызов деструктора Отправлено: OKTA от Ноябрь 22, 2013, 20:06 std::cout отрабатывает как надо
Название: Re: Вызов деструктора Отправлено: Majestio от Ноябрь 23, 2013, 12:17 Ради интереса, попробуй еще вот так:
qDebug() << "Message" << endl; Кстати, в инете пролетали подобные жалобы. Мож имеет смысл на Qt 5.x переходить? (5.1.1 не советую, пока стабильная 5.0.1) |