将QNetworkReply指针传递给QSharedPointer

时间:2017-08-04 11:51:51

标签: c++ qt smart-pointers qnetworkaccessmanager qsharedpointer

关于在以下情况中使用QSharedPointer的一个问题:

我有一个包含两个QSharedPointer私有类成员的类:

class xy{

...

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

在我发送QNetworkAccessManager帖子的代码中,返回值是QNetworkReply指针。

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

我想将此指针传递给我的QSharedPointer,即m_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

1 个答案:

答案 0 :(得分:0)

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

在Qt中要小心,以结合智能指针和QObjects育儿。 Qt中的Parenting通过某种伪垃圾收集影响对象释放。 删除的QObject的所有子项也将被删除。 例如,将它与QSharedPointer相结合可能会导致多个对象免费或在免费问题之后访问。