如何解决从QObject继承的内存泄漏? [英] How to fix memory leak while inheriting from QObject?
本文介绍了如何解决从QObject继承的内存泄漏?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个简单的类:
class HttpClient : public QObject
{
Q_OBJECT
public:
QNetworkAccessManager* manager;
QNetworkReply* reply;
HttpClient(){
manager = new QNetworkAccessManager();
reply = nullptr;
}
~HttpClient(){
delete reply;
}
public slots:
void slotReadyRead(){
cout << reply->readAll().data() << endl;
}
void slotNetworkError(QNetworkReply::NetworkError error){
cout << reply->error() << endl;
}
public:
void Get(QUrl url){
QNetworkRequest request;
request.setUrl(url);
reply = manager->get(request);
connect(reply, SIGNAL(finished()), this, SLOT(slotReadyRead()));
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(slotNetworkError(QNetworkReply::NetworkError)));
}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
HttpClient client;
client.Get(QUrl("http://localhost/SomeWebService.svc/GetData"));
return a.exec();
}
Visual Leak Detector此时指向内存泄漏:
Visual Leak Detector points to memory leak at this point:
manager = new QNetworkAccessManager(this);
如何解决?我不坚持这是最好的解决方案,但我只是开始与QT,我不明白为什么我在这里泄漏的记忆。
How do I fix it? I don't insist that this is the best solution, but I am just starting with QT and I don't understand why I am leaking memory here.
推荐答案
这是因为您通过this将父对象指针传递给
This is because you pass the parent object pointer via "this" to
http://qt-project.org/doc/qt-4.8/qnetworkaccessmanager.html#QNetworkAccessManager
,所有者的Qt内存模型将负责删除对象,参见
and the ownership, therefor the Qt Memory Model will take care of deleting the object, see
http://qt-project.org/doc/qt-4.8/objecttrees.html
另外,请查看
这篇关于如何解决从QObject继承的内存泄漏?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文