c++ - 这个 Qt 样板构造函数为什么不是递归的?

标签 c++ qt recursion

因此,当您创建标准 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/

相关文章:

c - 检查2个数组是否具有相同元素的递归方法

c++ - 输入所有子文件夹 - 递归

c++ - 用于删除一系列值的 STL 容器

c++ - 在 C++ 中,static 断言当前位置的声明不会包含在任何 namespace 中?

c++ - 如何在 QSortFilterProxyModel 中获取一个项目的行给 QString?

c++ - Qt 包含哪些头文件?

c++ - Qt:设置自定义小部件中小部件的最小大小

c - 为什么这段代码是正确的?

c++ - 双变量类型输出始终为 0

c++ - 尝试调用 main 中的函数时出错。