Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 唯一的ptr和传递到连接_Qt_C++11_Unique Ptr_Qscopedpointer - Fatal编程技术网

Qt 唯一的ptr和传递到连接

Qt 唯一的ptr和传递到连接,qt,c++11,unique-ptr,qscopedpointer,Qt,C++11,Unique Ptr,Qscopedpointer,在我的代码中 std::unique_ptr<QNetworkAccessManager> myNetworkAccessManager; ... myNetworkAccessManager.reset(new QNetworkAccessManager(this)); QObject::connect(myNetworkAccessManager.get(), SIGNAL(finished(QNetworkReply *)), this, SLOT(OnNetworkFini

在我的代码中

std::unique_ptr<QNetworkAccessManager> myNetworkAccessManager;
...
myNetworkAccessManager.reset(new QNetworkAccessManager(this));

QObject::connect(myNetworkAccessManager.get(), SIGNAL(finished(QNetworkReply *)), this, SLOT(OnNetworkFinished(QNetworkReply *)));
更新2


阅读此链接,似乎使用data()是正确的解决方案。这意味着使用stl中的get()也是正确的。

Qt有,因此对使用该机制处理的对象使用
std::unique\u ptr
是不正确的。我建议您只需确保正确定义父子关系,并让Qt为您处理。

我更新了使用QScopedPointer的代码,并想知道data()在connect()中的使用是否正确,正如@Jeffrey指出的,Qt有自己的内存管理,但使用get()或data()获取指向对象的指针并没有错。由于对象必须是connect的QObject,Qt仅使用指针监视对象的生存期,它不会尝试获取所有权。在其他一些地方,这肯定是不正确的,但对于信号和插槽,它在大多数情况下应该可以正常工作。熟悉如何在插槽中获取智能指针。
QScopedPointer<QNetworkAccessManager> myNetworkAccessManager;
...
myNetworkAccessManager.reset(new QNetworkAccessManager(this));

QObject::connect(myNetworkAccessManager.data(), SIGNAL(finished(QNetworkReply *)), this, SLOT(OnNetworkFinished(QNetworkReply *)));
connect(myNetworkAccessManager.data()