2016-08-06 8 views
3

あなたが標準Qt5ウィジェットアプリケーションを作成するときに、これはQMainWindowサブクラスのための定型コードです:このQt定型コンストラクタはどのように再帰的ではありませんか?

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; 
} 

だから、クラスが持っています自分自身のインスタンス、それはうまくいくようです。しかし、そのインスタンス自体が、これは自分自身を含むクラスの無限ループにつながらない方法

...今度は自身のインスタンスを持っていると思われる、自身のインスタンスを持っているでしょうか?

答えて

3

これらは同じクラスではありません。 MainWindowはグローバルネームスペースで宣言され、uiメンバーはUi::MainWindowのメンバーであり、Ui名前空間で宣言されています。 ui_mainwindow.hを見て、このクラスの宣言を見ることができます。 MainWindow::~MainWindow()が自身の中から呼び出されることはありませんので、

これら2つの異なる種類がありますので、何の再帰は、起こりません。

+0

これは意味がありますが、UIクラスの定義はどこですか? XML形式でのウィンドウのちょうどUIのthatsのみメインファイルと '.ui'ファイルRTFM後 – rcplusplus

+1

ネヴァーマインド、この2つのファイルのtheresの以外に、私は'宇井:: MainWindow'が 'uic'によって自動生成されたことが判明しました'.ui'ファイルをC++コードにコンパイルするツールです。あなたの答えは私の心からのすべての疑いを取り除いた!私がC++を使ってからしばらくしています:) – rcplusplus