2017-08-04 79 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