Russian Qt Forum
Июнь 16, 2024, 03:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Вызов деструктора  (Прочитано 9684 раз)
OKTA
Гость
« : Ноябрь 21, 2013, 17:19 »

Товарищи! Объясните пожалуйста! Почему в такой схеме, вроде простой на первый взгляд, сообщение DESTROYED то выводится в дебаг, то не выводится?

main.cpp
Код:
#include <QtGui/QApplication>
#include "mainwindow.h"
#include "mainy.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    mainy *mn = new mainy(&a);

    return a.exec();
}

mainy.h
Код:
#ifndef MAINY_H
#define MAINY_H

#include <QObject>
#include <QDebug>

class mainy : public QObject
{
    Q_OBJECT
public:
    explicit mainy(QObject *parent = 0);
    ~mainy();

public slots:
};

#endif // MAINY_H

mainy.cpp
Код:
#include "mainy.h"

mainy::mainy(QObject *parent) :
    QObject(parent)
{
}

mainy::~mainy() {
    //

    qDebug() << "DESTROYED";
}
Записан
Majestio
Гость
« Ответ #1 : Ноябрь 21, 2013, 17:29 »

Попробуй так:
Код:
mainy *mn = new mainy(&w);
Записан
OKTA
Гость
« Ответ #2 : Ноябрь 21, 2013, 17:31 »

the same  В замешательстве
Записан
mutineer
Гость
« Ответ #3 : Ноябрь 21, 2013, 17:38 »

А как приложение завершаешь?
Записан
Majestio
Гость
« Ответ #4 : Ноябрь 21, 2013, 17:40 »

the same  В замешательстве

Объяви внутри конструктора главного окна. По идее так правильнее.
Записан
OKTA
Гость
« Ответ #5 : Ноябрь 21, 2013, 17:44 »

А как приложение завершаешь?
да просто крестиком окошко закрываю)
Записан
OKTA
Гость
« Ответ #6 : Ноябрь 21, 2013, 17:45 »

the same  В замешательстве

Объяви внутри конструктора главного окна. По идее так правильнее.
Не особо похоже на правильность)
Записан
Majestio
Гость
« Ответ #7 : Ноябрь 21, 2013, 18:07 »

Не особо похоже на правильность)

Вот не надо ля-ля

Код:
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    Mainy *May = new Mainy(this);
}

100%-й вызов деструктора при закрытии
Записан
OKTA
Гость
« Ответ #8 : Ноябрь 21, 2013, 18:33 »

ну не создавать же мне все объекты в mainwindow теперь?))
Записан
Majestio
Гость
« Ответ #9 : Ноябрь 21, 2013, 19:17 »

ну не создавать же мне все объекты в mainwindow теперь?))

Ради интереса попробовал самый первый вариант.
Тож из 15 запусков - 15 выводов.

Разница только в 1 "лишней" строчке:
Код:
class Mainy : public QObject
{
    Q_OBJECT
public:
    explicit Mainy(QObject *parent = 0);
    ~Mainy();

signals:

public slots:

};
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #10 : Ноябрь 21, 2013, 19:29 »

Вы про строку signals?
Она ничего не дает, в данном случае.
Записан
Majestio
Гость
« Ответ #11 : Ноябрь 21, 2013, 19:37 »

Вы про строку signals?
Она ничего не дает, в данном случае.

Ну да. Я просто сравнил - это единственное отличие. У меня все отрабатывает на ура.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #12 : Ноябрь 21, 2013, 19:48 »

Ну да. Я просто сравнил - это единственное отличие. У меня все отрабатывает на ура.
Уберите ее, все будет продолжать работать.
Записан
Majestio
Гость
« Ответ #13 : Ноябрь 21, 2013, 19:59 »

Уберите ее, все будет продолжать работать.

Будет работать, я в курсе Улыбающийся
Записан
OKTA
Гость
« Ответ #14 : Ноябрь 21, 2013, 20:27 »

только вот на 4.7.4 то выдает, то не выдает DESTROYED  Непонимающий  Непонимающий  Непонимающий  Злой
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 22.