简体   繁体   English

将QNetworkReply指针传递给QSharedPointer

[英]Pass QNetworkReply pointer to QSharedPointer

One question about use of QSharedPointer in following scenario: 有关在以下情况下使用QSharedPointer一个问题:

I have a class with two QSharedPointer s private class members: 我有一班有两个QSharedPointer的私人班级成员:

class xy{

...

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

In the code I send a QNetworkAccessManager post, the return value is a QNetworkReply pointer. 在我发送QNetworkAccessManager帖子的代码中,返回值是QNetworkReply指针。

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

I want to to pass this pointer to my QSharedPointer ie m_nr . 我想将此指针传递给我的QSharedPointerm_nr I tried: 我试过了:

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));
...

But crashed, then I tried: 但是当机了,然后我尝试了:

m_nam.reset( new QNetworkAccessManager(m_parent.data()));
QNetworkRequest request(url);
...
...
// following line is my problem
m_nr.reset( m_nam->post(request, postData));
...

But also crashed. 而且还坠毁了。

How to pass QNetworkReply pointer correctly to my QSharedPointer ? 如何将QNetworkReply指针正确传递给QSharedPointer

What is the error on crash?? 什么是崩溃错误? Is it exactly crashing at the line you mentioned. 它确实在您提到的那行崩溃了。

Be carefull in Qt to combine smart pointers and QObjects parenting. 在Qt中要小心,以将智能指针和QObjects育儿结合起来。 Parenting in Qt affects object freeing with some kind of pseudo garbage collection. Qt中的育儿会通过某种伪垃圾回收来影响对象的释放。 All children of a deleted QObject are deleted as well. 删除的QObject的所有子对象也将被删除。 Combining this with QSharedPointer for example might result in multiple object free or access after free kind of problems. 例如,将其与QSharedPointer结合使用可能会导致释放多个对象,或者在出现某种类型的问题后进行访问。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM