(类成员变量的析构函数)与(类的析构函数)调用次序

先调用类的析构函数

再调用类成员变量的析构函数

form2.cpp

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

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

widget.h 

#ifndef WIDGET_H
#define WIDGET_H

#include 
#include "form2.h"
#include 
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 f;
    Form2 f3;
};

#endif // WIDGET_H

 widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include 
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"

类成员函数的析构次序应该与声明次序正相反。

你可能感兴趣的:(命令模式)