Правильно ли предположить, что QObject
с установщиком, берущим указатель:
Будет ли владение и удалить указатель, если указатель 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.
внутри вашей функции.