析构函数与Qt对象树的析构顺序

2024-01-03 18:37:02

form.cpp?

#include "form2.h"
#include "ui_form2.h"
#include <QDebug>
Form2::Form2(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Form2)
{
    ui->setupUi(this);
}

Form2::~Form2()
{
    qDebug()<<"~Form2";
    delete ui;
}

widget.cpp?

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include "try1.h"
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    f=new Form2(this);
}

Widget::~Widget()
{
    qDebug()<<"~Widget";
    delete f;
    qDebug()<<"---";
    delete ui;
}

?main.cpp

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

结果:(f通过delete f进行析构)

~Widget

~Form2

---

另一种写法:?

widget.cpp

Widget::~Widget()
{
    qDebug()<<"~Widget";
    qDebug()<<"---";
    delete ui;
}

结果:(f通过对象树进行析构)

~Widget

---

~Form2

分析:先调用了Widget的析构函数。然后会通过对象树进行析构!?

文章来源:https://blog.csdn.net/weixin_51883798/article/details/135365118
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。