Qt 纠正 unowned QObject return 语义
Qt correct unowned QObject return semantic
我有一个 QObject SystemdDBusManager
可以 return 其他 QObject (Unit
class)。这些对象没有任何理由属于 SystemdDBusManager
,但根据 the Qt documentation,这可能意味着 returned 对象属于 SystemdDBusManager。
class SystemdDBusManager : public QObject
{
Q_OBJECT
public:
Unit *getUnit(QString const &name);
};
有什么好方法可以表明 Unit
不属于 SystemdDBusManager
?
编写文档。
没有硬性规定,谁拥有指针,都是约定俗成的。如果你想让调用者拥有所有权,你必须在你的函数的文档中明确说明。
在函数名称中传达此意图也是一个好主意,因此我建议将其命名为 takeUnit
而不是 getUnit
,这意味着从 SystemDBusManager 获取所有权。
您可以 return 指向 Unit
对象的共享指针或唯一指针,具体取决于您将如何使用该对象。
这样,调用者就不必关心指针的生命周期了。
我有一个 QObject SystemdDBusManager
可以 return 其他 QObject (Unit
class)。这些对象没有任何理由属于 SystemdDBusManager
,但根据 the Qt documentation,这可能意味着 returned 对象属于 SystemdDBusManager。
class SystemdDBusManager : public QObject
{
Q_OBJECT
public:
Unit *getUnit(QString const &name);
};
有什么好方法可以表明 Unit
不属于 SystemdDBusManager
?
编写文档。
没有硬性规定,谁拥有指针,都是约定俗成的。如果你想让调用者拥有所有权,你必须在你的函数的文档中明确说明。
在函数名称中传达此意图也是一个好主意,因此我建议将其命名为 takeUnit
而不是 getUnit
,这意味着从 SystemDBusManager 获取所有权。
您可以 return 指向 Unit
对象的共享指针或唯一指针,具体取决于您将如何使用该对象。
这样,调用者就不必关心指针的生命周期了。