vlu*_*rsk 5 c++ qt memory-leaks
示例代码:
QDoubleValidator *validator = new QDoubleValidator();
myInputLineEdit->setValidator(validator);
// delete validator;
Run Code Online (Sandbox Code Playgroud)
注意:myInputLineEdit是一个QLineEdit指针,将与其父项一起删除.
我的问题是,我什么时候应该删除验证器,因为它是手动创建的,并且setValidator()根据文档似乎没有取得这个指针的所有权?如果我不删除它,它会是内存泄漏吗?
我试着删除它,就像注释代码一样,我注意到myInputLineEdit的验证器在此之后变为0.所以我想我可能需要删除myInputLineEdit后删除它.
另一个想法是,我可以给验证者一个父母,所以它将与其parrent一起删除,这是一个很好的方法吗?如果没有一个好的候选人成为父母怎么办?
谢谢
我试着删除它,就像注释代码一样,我注意到myInputLineEdit的验证器在此之后变为0.所以我想我可能需要删除myInputLineEdit后删除它.
这是因为内部QLineEdit
使用QPointer
,QValidator
如果它被删除则跟踪对象.
根据文档,setValidator()似乎没有获得此指针的所有权
setValidator()
确实没有设置QValidator的父级.
另一个想法是,我可以给验证者一个父母,所以它将与其parrent一起删除,这是一个很好的方法吗?如果没有一个好的候选人成为父母怎么办?
你可以手动删除它,使用智能指针或者像@crayzeewulf所说 - 设置myInputLineEdit
为父(使用QValidator
构造函数或setParent()
).父母负责删除其子女,所以这是一种方法.通常对哪个验证器分配的对象是一个好父母.
如果我不删除它,它会是内存泄漏吗?
如果既未设置父项也不删除它,则会出现内存泄漏.