根据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);
但是,即使传递所有权,内存泄漏仍然会发生(删除或不删除)。
这是假阳性,还是我没有看到什么?