假设带有指针的QObject
取指针是否正确:
如果指针是T*
?
示例:void QComboBox::setModel(QAbstractItemModel *)
如果指针为const T*
,则不会取得所有权而不会删除指针?
示例:void QLineEdit::setValidator(const QValidator *)
答案 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.
你的功能。