3

假设 aQObject带有一个带有指针的 setter 是否正确:

  • 如果指针是T*?将取得所有权并删除指针

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

  • const T*如果指针是?将不会取得所有权并且不会删除指针

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

4

3 回答 3

4

对此没有严格的规定-在您的情况下,“接收者对象”不拥有传递对象的所有权。

在所有权转移的情况下,它会记录在案,例如参见QComboBox::setLineEdit()

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

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

按照 piotrus 的建议,将父级传递给验证器或模型始终是安全的。

于 2013-11-06T12:56:16.317 回答
2

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

于 2013-11-06T12:54:11.167 回答
0

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.

在你的函数里面。

于 2013-11-06T12:51:47.953 回答