【发布时间】:2014-04-24 11:43:05
【问题描述】:
这是我的代码。但我很困惑我应该在哪里删除m_networkManager。我可以做到这一点
onRequestCompleted() slot 但问题是我的程序经常调用 getData 函数。
我担心的是这种情况:
-
getData()被调用。 - 在
onRequestCompleted()插槽被触发之前,我的 程序再次调用getData()。 -
onRequestCompleted()第一个getData()调用被触发。 - 我的程序删除了在第二次调用
getData()时实际分配的其他内存的m_networkManager。
我认为这种情况会导致崩溃。
void MyApp::getData() {
QNetworkRequest request;
request.setUrl(QUrl("http://www.domain.foo"));
m_networkManager = new QNetworkAccessManager(this); // Instance variable
connect(m_networkManager, SIGNAL(finished(QNetworkReply*)),
this, SLOT(onRequestCompleted(QNetworkReply *)));
m_networkManager->get(request);
}
void MyApp::onRequestCompleted(QNetworkReply *reply) {
QByteArray data = reply->readAll();
reply->deleteLater();
//m_networkManager->deleteLater();
}
【问题讨论】:
-
为什么要为每个请求创建一个新的
QNetworkAccessManager?