Как исправить утечку памяти при наследовании от 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 указывает на утечку памяти в этой точке:

manager = new QNetworkAccessManager(this);

Как мне это исправить? Я не настаиваю на том, что это лучшее решение, но я только начинаю с QT и не понимаю, почему у меня здесь утечка памяти.

0

Решение

Это потому, что вы передаете указатель родительского объекта через «this»

http://qt-project.org/doc/qt-4.8/qnetworkaccessmanager.html#QNetworkAccessManager

и владелец, поэтому Qt Memory Model позаботится об удалении объекта, смотрите

http://qt-project.org/doc/qt-4.8/objecttrees.html

Кроме того, проверить

Управление памятью в Qt?

1

Другие решения

Я думаю, вы не можете позвонить:

 delete manager?
0

По вопросам рекламы [email protected]