我有一個簡單的類:如何解決從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();
}
視覺檢漏儀指向的內存泄漏在這一點上:
manager = new QNetworkAccessManager(this);
如何解決呢?我並不堅持認爲這是最好的解決方案,但我只是從QT開始,我不明白爲什麼我在這裏泄漏內存。
也許'QNetworkAccessManager'分配一些靜態的數據? –
代碼很好。這是誤報。 –
「HttpClient」本身是否被銷燬? –