gpt4 book ai didi

c++ - 为什么这段代码在需要一个对象时创建了两个对象?

转载 作者:行者123 更新时间:2023-11-30 02:50:41 26 4
gpt4 key购买 nike

这是 Qt 的教程代码:

头文件:

#include <QMainWindow>

namespace Ui {
class Notepad;
}

class Notepad : public QMainWindow
{
Q_OBJECT

public:
explicit Notepad(QWidget *parent = 0);
~Notepad();

private:
Ui::Notepad *ui;
};

源文件:

#include "notepad.h"
#include "ui_notepad.h"

Notepad::Notepad(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Notepad)
{
ui->setupUi(this);
}

Notepad::~Notepad()
{
delete ui;
}

主要是

#include "notepad.h"
#include <QApplication>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Notepad w;
w.show();

return a.exec();
}

那么当我们执行Notepad w时,已经在栈上创建了一个对象,为什么代码仍然在堆上使用new创建另一个对象并赋值给一个成员?

最佳答案

堆栈上的那个是记事本类型的,它是应用程序的主窗口。动态的是 Ui::Notepad 类型。那是Qt的uic工具自动生成的类;它包含在 UI creator 中作为数据成员创建的小部件。

在某种程度上,您可以说 Notepad 关注逻辑并使用 Ui::Notepad 的实例为其提供 GUI。

关于c++ - 为什么这段代码在需要一个对象时创建了两个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20250293/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com