Qt正确的无主QObject返回语义

问题描述

我有一个QObject SystemdDBusManager,它可以返回其他QObject(Unit类)。这些对象没有任何理由归SystemdDBusManager所有,但根据the Qt documentation,这可能意味着返回的对象归SystemdDBusManager所有。

class SystemdDBusManager : public QObject
{
Q_OBJECT

public:
    Unit *getUnit(QString const &name);    
};

明确表明Unit不归SystemdDBusManager所有的好方法是什么?

解决方法

编写文档。

没有硬性规则,谁拥有一个指针,这都是惯例。如果希望调用方拥有所有权,则必须在函数的文档中明确说明。

在函数名称中表达此意图也可能是一个好主意,因此,我建议将其命名为getUnit而不是takeUnit,这意味着从SystemDBusManager拥有所有权。

,

您可以返回共享的指针或指向Unit对象的唯一指针,这取决于您将如何使用该对象。

那样,调用者将不必关心指针的寿命。