假设 aQObject
带有一个带有指针的 setter 是否正确:
如果指针是
T*
?将取得所有权并删除指针例子:
void QComboBox::setModel(QAbstractItemModel *)
const T*
如果指针是?将不会取得所有权并且不会删除指针例子:
void QLineEdit::setValidator(const QValidator *)
对此没有严格的规定-在您的情况下,“接收者对象”不拥有传递对象的所有权。
在所有权转移的情况下,它会记录在案,例如参见QComboBox::setLineEdit():
设置要使用的行编辑而不是当前行编辑小部件。组合框拥有行编辑的所有权。
如果存在没有记录的所有权转移的情况,我会认为这是一个 Qt 错误。
按照 piotrus 的建议,将父级传递给验证器或模型始终是安全的。
QObject 获得所有权的唯一时间是它成为另一个对象的父对象,或者它被明确记录为获得所有权
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.
在你的函数里面。