【发布时间】:2015-03-21 21:22:24
【问题描述】:
示例代码:
QDoubleValidator *validator = new QDoubleValidator();
myInputLineEdit->setValidator(validator);
// delete validator;
注意:myInputLineEdit 是一个 QLineEdit 指针,将与其父级一起删除。
我的问题是,我应该什么时候删除验证器,因为它是手动创建的,并且根据文档,setValidator() 似乎没有获得该指针的所有权?不删除会不会是内存泄露?
之后我尝试删除它,就像注释的代码一样,我注意到 myInputLineEdit 的验证器在那之后变成了 0。所以我想我可能需要在删除 myInputLineEdit 后删除它。
另一个想法是,我可以给验证器一个父节点,这样它就会和它的父节点一起被删除,这是一个好方法吗?如果没有合适的家长候选人怎么办?
谢谢
【问题讨论】:
-
如果您对
setValidator不拥有所有权的原因感兴趣:这可能是因为您可以对多个输入小部件使用相同的验证器,所以它有点共享 i> 所有权。但是 QObjects 没有共享所有权,而是 unique 父所有权,因此您需要将父级设置为 some 小部件(行编辑或它的父级,任何最有意义的)。
标签: c++ qt memory-leaks