【发布时间】:2014-12-02 19:07:58
【问题描述】:
我很好奇是否有人知道通过将QValidator 重置为零来删除它是否会泄漏内存。 QT Documentation 提到验证器已“删除”,但这是否也意味着它已被删除?
我的意思的一个例子......
QLineEdit edit;
edit.setValidator(new QIntValidator(0,100));
// .... use the line edit
edit.setValidator(0);
【问题讨论】:
-
请记住,父级将保留子 QObjects 的列表,并且当父级被销毁时,它将释放其子级。我希望 QIntValidator 是 QLineEdit 的孩子。 qt-project.org/doc/qt-4.8/qobject.html#dtor.QObject
-
@drescherjm 好像不正确,请看我的回答,我加了解释,lineEdit 没有所有权。
-
@Chernobyl 看来你是对的。这是 Qt-4.8.6 的内部结构:
void setValidator(const QValidator *v) { m_validator = const_cast<QValidator*>(v); }这是来自文件:qlinecontrol_p.h -
@drescherjm 看到了这个,只是没加这个回答,我加了代码和输出的例子,我觉得足以证明了。
-
@drescherjm 我认为它不拥有验证器的所有权,因为它允许您通过多个小部件使用单个验证器实例。
标签: c++ qt memory-leaks