Qt拥有'objects'(T*和常量T*)
Qt ownership of 'objects' (T* and const T*)
假设一个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.
在您的函数内。
相关文章:
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 什么时候在C++中返回常量引用是个好主意
- 代理对象的常量正确性
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 通过多个头文件使用常量变量
- 在cuda线程之间共享大量常量数据
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 是默认情况下分配给char数组常量的值
- 私有类型的静态常量成员
- 类似枚举的计算常量
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 为什么我可以通过引用修改常量返回
- 如何创建长度由常量参数指定的数组
- 当一个值是非常量但用常量表达式初始化时使用constexpr
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- 隐式常量/非常量运算符布尔
- 非常量变量只读位置的赋值
- Qt拥有'objects'(T*和常量T*)