unique_ptr并传递给连接

时间:2015-10-23 02:10:09

标签: qt c++11 unique-ptr qscopedpointer

在我的代码中

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

1 个答案:

答案 0 :(得分:4)

Qt有it's own memory management mechanism,因此对于使用该机制处理的对象使用std::unique_ptr是不正确的。我建议只需确保正确定义父子关系,让Qt为你处理。