0

关于QSharedPointer在以下场景中使用的一个问题:

我有一个有两个QSharedPointers 私人班级成员的班级:

class xy{

...

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

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

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

我想将此指针传递给我的QSharedPointerie 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

4

1 回答 1

0

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

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

于 2017-08-09T08:31:49.550 回答