我将内部(私有)对象存储为QSharedPointer(因此它将删除它)。对于getter,我应该返回一个引用一个原始指针或一个QSharedPointer?
此外,我不确定http://qt-project.org/wiki/SharedPointersAndQmlOwnership的含义。有人能为我总结一下吗?
答案 0 :(得分:1)
最终,您正在定义getter的语义。由您决定由它返回的任何对象的生命周期。
具体来说,如果getter返回的内容预计比getter成员的对象寿命长,那么必须:
返回共享指针,或
返回副本。
您的内部存储对象可以隐式共享(例如使用QSharedData
和QSharedDataPointer
(与 QSharedPointer
不同!),以便副本可以如果不进行进一步修改,便宜。
如果getter返回的任何东西只需要生成并且有效,只要其成员是getter的对象,那么你还可以提供以下选项:
返回参考,
返回一个const引用,
返回一个普通指针(非智能)。
名义上,当getter成员的对象死亡时,返回引用和普通指针的getter返回的值推测无效。只有当堆分配对象的所有权通过返回指针传递给调用者时,才可以通过显式记录“getter”来打破推定。