问题描述
我有一个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
对象的唯一指针,这取决于您将如何使用该对象。
那样,调用者将不必关心指针的寿命。