需要手动删除QValidator吗?

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一起删除,这是一个很好的方法吗?如果没有一个好的候选人成为父母怎么办?

谢谢

doc*_*doc 6

我试着删除它,就像注释代码一样,我注意到myInputLineEdit的验证器在此之后变为0.所以我想我可能需要删除myInputLineEdit后删除它.

这是因为内部QLineEdit使用QPointer,QValidator如果它被删除则跟踪对象.

根据文档,setValidator()似乎没有获得此指针的所有权

setValidator() 确实没有设置QValidator的父级.

另一个想法是,我可以给验证者一个父母,所以它将与其parrent一起删除,这是一个很好的方法吗?如果没有一个好的候选人成为父母怎么办?

你可以手动删除它,使用智能指针或者像@crayzeewulf所说 - 设置myInputLineEdit为父(使用QValidator构造函数或setParent()).父母负责删除其子女,所以这是一种方法.通常对哪个验证器分配的对象是一个好父母.

如果我不删除它,它会是内存泄漏吗?

如果既未设置父项也不删除它,则会出现内存泄漏.