unique_ptr 并传递到连接

adv*_*ner 4 qt unique-ptr c++11 qscopedpointer

在我的代码中

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

QObject::connect(myNetworkAccessManager.get(), SIGNAL(finished(QNetworkReply *)), this, SLOT(OnNetworkFinished(QNetworkReply *)));
Run Code Online (Sandbox Code Playgroud)

有问题的代码:connect() 中的myNetworkAccessManager.get ()

我的问题是最好的方法是什么?

我正在阅读这篇文章 ,它在 Legacy Code 下说:

调用 get() 返回一个指向底层方法的指针。如果可以,您真的想避免调用它,因为一旦您将原始指针释放到野外,您就失去了通过切换到 unique_ptr 所获得的许多优势

更新

如果我改成使用如果我使用QScopedPointer,我的代码如下:

QScopedPointer<QNetworkAccessManager> myNetworkAccessManager;
...
myNetworkAccessManager.reset(new QNetworkAccessManager(this));

QObject::connect(myNetworkAccessManager.data(), SIGNAL(finished(QNetworkReply *)), this, SLOT(OnNetworkFinished(QNetworkReply *)));
Run Code Online (Sandbox Code Playgroud)

这会是正确的解决方案吗:

connect(myNetworkAccessManager.data()
Run Code Online (Sandbox Code Playgroud)

更新 2

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

Sho*_*hoe 5

Qt 有它自己的内存管理机制,因此使用std::unique_ptr该机制处理的对象是不正确的。我建议您只需确保正确定义父子关系,并让 Qt 为您处理。