关于在以下情况下使用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
?
崩溃时的错误是什么? 它是否正好在你提到的那条线上崩溃。
在Qt中要小心,将智能指针和QObjects育儿结合起来。 Qt中的育儿会影响通过某种伪垃圾收集释放对象。 已删除的 QObject 的所有子项也会被删除。 例如,将其与 QSharedPointer 结合使用可能会导致多个对象空闲或释放后访问类型的问题。