将 QNetworkReply 指针传递给 QSharedPointer

Pass QNetworkReply pointer to QSharedPointer

本文关键字:QSharedPointer QNetworkReply 指针      更新时间:2023-10-16

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

我有一个班级,有两个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

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

在Qt中要小心,将智能指针和QObjects育儿结合起来。 Qt中的育儿会影响通过某种伪垃圾收集释放对象。 已删除的 QObject 的所有子项也会被删除。 例如,将其与 QSharedPointer 结合使用可能会导致多个对象空闲或释放后访问类型的问题。