2017-08-04 77 views
0

一个问题在以下情形:通QNetworkReply指针QSharedPointer有关使用<code>QSharedPointer</code>

我有两个QSharedPointer私有类成员的类:

class xy{ 

... 

private: 
    QSharedPointer<QNetworkAccessManager> m_nam; 
    QSharedPointer<QNetworkReply>   m_nr; 
}; 

在我发送一个QNetworkAccessManager后的代码,返回值是一个QNetworkReply指针。

QNetworkReply * QNetworkAccessManager::post(const QNetworkRequest & request, const QByteArray & data) 

我想这个指针传递给我的QSharedPointerm_nr。 我想:

m_nam.reset(new QNetworkAccessManager(m_parent.data())); 
QNetworkRequest request(url); 
... 
... 
// following line is my problem 
m_nr = QSharedPointer<QNetworkReply>(m_nam->post(request, postData)); 
... 

但崩溃,然后我想:

m_nam.reset(new QNetworkAccessManager(m_parent.data())); 
QNetworkRequest request(url); 
... 
... 
// following line is my problem 
m_nr.reset(m_nam->post(request, postData)); 
... 

但也应声。

如何正确地将QNetworkReply指针传递给我的QSharedPointer

+0

请提供最小,完整和可验证的示例。 https://stackoverflow.com/help/mcve – hank

+0

应该是足够的示例代码,我认为 – user3728686

回答

0

什么是崩溃错误? 它是否完全崩溃在你提到的路线。

要小心Qt中结合智能指针和QObjects父母。 Qt中的育儿会影响对象释放某种伪垃圾回收。 删除的QObject的所有子项也被删除。 将此与QSharedPointer结合起来可能会导致多个对象空闲或在免费类问题后访问。

+0

是的,它崩溃在我提到的这条线。目前我不使用智能指针,而是使用QNetworkReply指针来传递“m_nam-> post()”的结果。因为此刻没有时间。我稍后会继续讨论这个问题。 – user3728686