简单地使用QNAM会导致内存泄漏

时间:2014-03-22 17:46:17

标签: c++ qt memory-leaks

根据valgrind,以下代码有内存泄漏。

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

    network_manager = new QNetworkAccessManager();
    do_stuff();
}

MainWindow::~MainWindow()
{
    delete network_manager; // <-------- Removing this line fixes the leak
    delete ui;
}

void MainWindow::do_stuff()
{
    connect(network_manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(process_stuff(QNetworkReply*)));

    request.setUrl(QUrl("https://www.google.com/"));
    network_manager->get(request);
}

void MainWindow::process_stuff(QNetworkReply *reply)
{
    qDebug() << reply->readAll();
    reply->deleteLater();
}

我创建了一个QNetworkAccessManager对象,并在调用析构函数时手动删除它。但是,如果我删除删除调用,内存泄漏就会消失。我不明白这一点,因为根据Qt model我不应该在我通过所有权时调用delete: new QNetworkAccessManager(this);但是,即使传递所有权,内存泄漏仍然会发生(删除或不删除)。

这是假阳性,还是我没有看到什么?

0 个答案:

没有答案