【问题标题】:Pass QNetworkReply pointer to QSharedPointer将 QNetworkReply 指针传递给 QSharedPointer
【发布时间】:2017-08-04 11:51:50
【问题描述】:

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

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

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

【问题讨论】:

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


【解决方案1】:

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

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

【讨论】:

  • 是的,它正好在我提到的这一行崩溃。目前我不使用智能指针,而是使用 QNetworkReply 指针来传递来自“m_nam->post()”的结果。因为现在没时间。我稍后会继续处理这个问题......
猜你喜欢
  • 1970-01-01
  • 2017-06-09
  • 2021-01-03
  • 2018-12-31
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
相关资源
最近更新 更多