这个Qt样板构造函数怎么不是递归的

How is this Qt boilerplate constructor not recursive?

本文关键字:递归 Qt 构造函数 这个      更新时间:2023-10-16

因此,当您创建一个标准的Qt5小部件应用程序时,这是QMainWindow子类的样板代码:

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}
MainWindow::~MainWindow()
{
    delete ui;
}

所以这个类有一个自己的实例,这似乎很好。但那个实例本身会有一个自身的实例,而这个实例又会有自己的实例。。。

这怎么不会导致包含它们自己的类的无限递归呢?

这不是同一个类。MainWindow在全局命名空间中声明,而ui成员的类型为Ui::MainWindow,它在Ui命名空间中声明。您可以通过查看ui_mainwindow.h来查看此类的声明。

由于这是两种不同的类型,因此不会发生递归,因为MainWindow::~MainWindow()不会从其内部调用。