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()