在我的代码中
std::unique_ptr<QNetworkAccessManager> myNetworkAccessManager;
...
myNetworkAccessManager.reset(new QNetworkAccessManager(this));
QObject::connect(myNetworkAccessManager.get(), SIGNAL(finished(QNetworkReply *)), this, SLOT(OnNetworkFinished(QNetworkReply *)));
有问题的代码:connect()
中的 myNetworkAccessManager.get()我的问题是最好的方法是什么?
我在这里阅读文章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()也是正确的。
答案 0 :(得分:4)
Qt有it's own memory management mechanism,因此对于使用该机制处理的对象使用std::unique_ptr
是不正确的。我建议只需确保正确定义父子关系,让Qt为你处理。