因此,当您创建标准 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()
不会从其内部调用。
关于c++ - 这个 Qt 样板构造函数为什么不是递归的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38809489/