4

在我的代码中

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() 也是正确的。

4

1 回答 1

4

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

于 2015-10-23T02:16:42.960 回答