如何释放内存

How to release memory?

本文关键字:内存 释放 何释放      更新时间:2023-10-16

我已经为我的大学作业创建了一个简单的QT应用程序。 我所做的是从上面的QMainWindow弹出一个新的QManinWindow。当我从主 UI 单击按钮时,它会弹出一个新的 QMainWindow 对象(记事本)

记事本也是一个 QMainWindow 对象

我的问题是当我创建对象时,它会从 ram 中占用一些内存,但是当我关闭它(弹出窗口)时,内存没有释放。当我每次按下按钮时,都会分配内存,但应用程序在关闭内存时不会释放内存。请检查应用程序的主屏幕。

我只是想知道如何释放那段记忆。我尝试了很多东西,但没有一个效果很好。

我已经在记事本类上设置了 closeEvent 公共,当它被触发时,我从主对象侦听关闭事件,我已经删除了弹出的对象。但它会导致广告意外停止。

void MainWindow::on_notePadBtn_clicked()
{
    NotePad *notePad = new NotePad(this);
    notePad->raise();
    notePad->activateWindow();
    notePad->show();
}

NotePad::NotePad(QWidget *parent) :QMainWindow(parent),ui(new Ui::NotePad) {
    ui->setupUi(this);
    this->setWindowTitle("Note Pad");
}

你真的不需要覆盖closeEvent,Qt有Qt::WA_DeleteOnClose属性,它完全可以做你想要的,你可以这样使用它:

//...
NotePad *notePad = new NotePad(this);
notePad->setAttribute(Qt::WA_DeleteOnClose);
notePad->raise();
notePad->activateWindow();
notePad->show();
//...

我不熟悉Qt。

但据我了解,如果您使用运算符 new必须使用 delete(在可以访问使用 new 创建的指针的范围内)。

Object *foo = new Object();
// Do stuff with foo...
delete foo;
// DO NOT use foo from now on. 

希望这有所帮助,也许。就像我说的我不熟悉Qt因此,如果您对某些功能的实现方式有疑问,您应该查看他们的文档。

(参见:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3797.pdf§3.7.4p63)