【问题标题】:Using smart pointers as arguments of Qt standard functions使用智能指针作为 Qt 标准函数的参数
【发布时间】:2018-12-10 14:09:14
【问题描述】:

一切都在标题中:我想知道是否可以使用智能指针作为函数参数而不是原始指针?

例如,我想使用 QsharedPointer<QStringListModel> 而不是 QStringListModel* 作为函数 QListView::setModel 的参数。

这不仅与 Qt 框架有关,而且通常与 STL 有关。 不幸的是,这次谷歌无法帮助我。

【问题讨论】:

  • 不,您不能将智能指针用作需要原始指针的函数的参数,除非它有一个转换运算符。
  • 您必须使用 get() 将其转换为原始指针,尽管这可能会破坏您首先使用智能指针的理由。我的建议是只使用父/子关系来处理所有权。使用QObject,当父级被销毁时,它会释放其所有子级。确保在模型上设置父级。
  • std::unique_ptrstd::shared_ptr 也有一个 get() 方法来检索原始指针。再次记住要确保在对象的生命周期结束后不要使用原始指针。

标签: c++ qt stl smart-pointers


【解决方案1】:

如果函数将原始指针作为参数,那么不,这是不可能的。但是,您可以使用get() 方法从智能指针获取原始指针并将其作为参数传递。

【讨论】:

    【解决方案2】:

    除非setModel 函数具有接受QsharedPointer<QStringListModel> 的重载,否则您需要提供存储在共享指针中的原始指针。您可以使用shared_ptr_variable.data() 来执行此操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-17
      • 2021-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多