【发布时间】:2015-10-23 02:10:09
【问题描述】:
在我的代码中
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()
我的问题是最好的方法是什么?
我在这里阅读文章article 它在旧代码下的说明:
调用 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 c++11 unique-ptr qscopedpointer