在我的代码中
std::unique_ptr<QNetworkAccessManager> myNetworkAccessManager;
...
myNetworkAccessManager.reset(new QNetworkAccessManager(this));
QObject::connect(myNetworkAccessManager.get(), SIGNAL(finished(QNetworkReply *)), this, SLOT(OnNetworkFinished(QNetworkReply *)));
需要翻译的内容:
代码中的问题:myNetworkAccessManager.get()在connect()函数中。
我的问题是,最好的方法是什么?
我在这里阅读了这篇文章article,其中在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 *)));
这是否是正确的解决方案呢:
connect(myNetworkAccessManager.data()
更新2
阅读这个链接stackoverflow,似乎使用data()是正确的解决方法。这意味着使用stl中的get()也是正确的。
std::unique_ptr
)在堆中声明根对象,并管理其生命周期。 - RAM