Qt'对象'的所有权(T *和const T *)

时间:2013-11-06 12:36:30

标签: c++ qt

假设带有指针的QObject取指针是否正确:

  • 如果指针是T*

    ,将取得所有权并删除指针

    示例:void QComboBox::setModel(QAbstractItemModel *)

  • 如果指针为const T*,则不会取得所有权而不会删除指针?

    示例:void QLineEdit::setValidator(const QValidator *)

3 个答案:

答案 0 :(得分:4)

没有严格的规则 - 在您的情况下,“接收者对象”不会获得传递的对象的所有权。

如果转让了所有权,则会对其进行记录,例如参见QComboBox::setLineEdit()

  

设置要使用的行编辑,而不是当前行编辑小部件。   组合框取得了行编辑的所有权。

如果没有文件证明存在所有权转移的情况,我会认为这是一个Qt错误。

按照piotrus的建议将父母传递给验证者或模型总是安全的。

答案 1 :(得分:3)

QObject获取所有权的唯一时间是它成为另一个对象的父级,或者是否明确记录为取得所有权

答案 2 :(得分:1)

QObject将在删除时删除其所有子项。要为这样的QObject添加一个孩子,必须建立适当的关系,即:

QObject* parent = new QObject();
QObject* child = new QObject(parent);
delete parent;//all the child objects will get deleted when parent is deleted

在你的例子中没有这样的陈述,你应该打电话给

QAbstractItemModel ( QObject * parent = 0 )
在将指针传递给函数或调用

之前的

构造函数

void QObject::setParent ( QObject * parent )
//Makes the object a child of parent.

你的功能。