Simple use of QNAM causes a memory leak

According to valgrind, the following code has a memory leak.

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

I create a QNetworkAccessManager object, and I delete it manually when the destructor is called. But, if I delete the delete call, the memory leak will disappear. I don’t understand this, because according to the Qt model, I should not have called delete if I transfer ownership: new QNetworkAccessManager(this);But still, even transferring ownership, a memory leak occurs (deletion or deletion).

Is this false positive, or am I not seeing anything?

+4
source share

Source: https://habr.com/ru/post/1532991/


All Articles