【发布时间】:2018-12-10 14:09:14
【问题描述】:
一切都在标题中:我想知道是否可以使用智能指针作为函数参数而不是原始指针?
例如,我想使用 QsharedPointer<QStringListModel> 而不是 QStringListModel* 作为函数 QListView::setModel 的参数。
这不仅与 Qt 框架有关,而且通常与 STL 有关。 不幸的是,这次谷歌无法帮助我。
【问题讨论】:
-
不,您不能将智能指针用作需要原始指针的函数的参数,除非它有一个转换运算符。
-
您必须使用 get() 将其转换为原始指针,尽管这可能会破坏您首先使用智能指针的理由。我的建议是只使用父/子关系来处理所有权。使用
QObject,当父级被销毁时,它会释放其所有子级。确保在模型上设置父级。 -
std::unique_ptr和std::shared_ptr也有一个get()方法来检索原始指针。再次记住要确保在对象的生命周期结束后不要使用原始指针。
标签: c++ qt stl smart-pointers