Qt中指针new和默认构造函数有什么区别?

What's the different between pointer new and default constructor in Qt?

我是 Qt 和 C++ 的新手。我的感受如下:

//1
widget a;
a.show();
//2
widget *b=new widget();
b->show();

而且我记得小部件 class(继承自 QWidget)具有默认构造函数。但是如果我在按钮中使用它,例如:

void MainWindow::on_pushButton_clicked()
{
    //widget v;
    //v.show();
    widget *v=new widget();
    v->show();
}

第一个在 10 毫秒后关闭。是什么导致它们之间的差异?

更新:

我提出这个问题是因为在 qt main 中创建 windows 最流行的方法是:

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

它可以工作。 .exec() 是一个无限循环。所以我想知道为什么它不能正常工作...

这是因为在第一个片段中,对象被放置在堆栈中,所以一旦超出范围就会被销毁。 new 关键字将它放在堆上。这意味着它将一直存在,直到您再次 delete 或退出应用程序。所以你必须考虑这一点,因为如果你不确保你的对象被删除,你就会发生内存泄漏。

现在有很多智能指针(也来自 Qt)可以为您删除对象。 Qt 还会删除被删除对象的子对象,这也可以帮助您管理内存。

这是需要理解的非常重要的 c++ 部分,因此您不应该尝试从 Whosebug 答案中学习所有内容:)


在不了解你的应用程序的情况下,我猜这里对你来说最好的选择是,将小部件添加为主 window 的成员变量,然后调用 [=12= 】 需要的时候。 这意味着它与MainWindow同时构建。