在我的代码中
std::unique_ptr<QNetworkAccessManager> myNetworkAccessManager;
...
myNetworkAccessManager.reset(new QNetworkAccessManager(this));
QObject::connect(myNetworkAccessManager.get(), SIGNAL(finished(QNetworkReply *)), this, SLOT(OnNetworkFinished(QNetworkReply *)));
有问题的代码:myNetworkAccessManager.get() in connect()
我的问题是最好的方法是什么?我正在阅读这篇文章在遗留代码下面写着:
调用get()返回一个指向底层方法的指针。如果可以的话,您确实希望避免调用这个方法,因为一旦您将原始指针释放到外部,您就失去了切换到unique_ptr
所获得的大部分优势。如果我使用QScopedPointer,我的代码将如下:
QScopedPointer<QNetworkAccessManager> myNetworkAccessManager;
...
myNetworkAccessManager.reset(new QNetworkAccessManager(this));
QObject::connect(myNetworkAccessManager.data(), SIGNAL(finished(QNetworkReply *)), this, SLOT(OnNetworkFinished(QNetworkReply *)));
这是正确的解决方案吗?
connect(myNetworkAccessManager.data()
更新2
阅读这个链接stackoverflow似乎使用data()是正确的解决方案。这意味着从stl中使用get()也是正确的。
Qt有它自己的内存管理机制,所以使用std::unique_ptr
的对象与该机制处理是不正确的。我的建议只是确保正确定义父子关系,并让Qt为您处理。