应该来自对象的getters返回引用指针或QSharedPointers?

时间:2014-02-13 12:00:43

标签: qt shared-ptr getter qsharedpointer

我将内部(私有)对象存储为QSharedPointer(因此它将删除它)。对于getter,我应该返回一个引用一个原始指针或一个QSharedPointer?

此外,我不确定http://qt-project.org/wiki/SharedPointersAndQmlOwnership的含义。有人能为我总结一下吗?

1 个答案:

答案 0 :(得分:1)

最终,您正在定义getter的语义。由您决定由它返回的任何对象的生命周期。

具体来说,如果getter返回的内容预计比getter成员的对象寿命长,那么必须

  • 返回共享指针,或

  • 返回副本。

您的内部存储对象可以隐式共享(例如使用QSharedDataQSharedDataPointer QSharedPointer不同!),以便副本可以如果不进行进一步修改,便宜。

如果getter返回的任何东西只需要生成并且有效,只要其成员是getter的对象,那么你可以提供以下选项:

  • 返回参考,

  • 返回一个const引用,

  • 返回一个普通指针(非智能)。

名义上,当getter成员的对象死亡时,返回引用和普通指针的getter返回的值推测无效。只有当堆分配对象的所有权通过返回指针传递给调用者时,才可以通过显式记录“getter”来打破推定。