先调用类的析构函数
再调用类成员变量的析构函数
form2.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:"<<this->objectName();
delete ui;
}
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include "form2.h"
#include <memory>
using namespace std;
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
protected:
private:
Ui::Widget *ui;
Form2 f1;
std::shared_ptr<Form2> f;
Form2 f3;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
f1.setObjectName("one");
f.reset(new Form2);
f.get()->setObjectName("two");
f3.setObjectName("three");
}
Widget::~Widget()
{
qDebug()<<"~Widget";
delete ui;
}
输出结果:
~Widget
~Form2: "three"
~Form2: "two"
~Form2: "one"
类成员函数的析构次序应该与声明次序正相反。