Qt更正无主QObject返回语义



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

class SystemdDBusManager : public QObject
{
Q_OBJECT
public:
Unit *getUnit(QString const &name);    
};

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

编写文档。

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

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

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

这样,调用者就不必关心指针的生存期了。

最新更新