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;
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?
Tenza source
share