Unique_ptr和传递连接



在我的代码中

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为您处理。

相关内容

  • 没有找到相关文章

最新更新