如何释放内存?

时间:2018-12-31 20:33:38

标签: c++ qt

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

记事本也是QMainWindow对象

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

我只想知道如何释放该内存。我已经尝试了很多东西,但是没有任何效果。

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

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

2 个答案:

答案 0 :(得分:2)

您实际上并不需要重写closeEvent,Qt具有Qt::WA_DeleteOnClose属性,该属性正是您想要的,您可以像这样使用它:

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

答案 1 :(得分:-2)

我对Qt不熟悉。

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

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

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

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