gpt4 book ai didi

c++ - 重置 QValidator 是否会泄漏内存?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:02:03 31 4
gpt4 key购买 nike

我很好奇是否有人知道通过将其重置为零来删除 QValidator 是否会泄漏内存。 QT Documentation提到验证器被“移除”,但这是否也意味着它被删除了?

我的意思的一个例子......

QLineEdit edit;
edit.setValidator(new QIntValidator(0,100));

// .... use the line edit

edit.setValidator(0);

最佳答案

不,0 不会删除validator,只会从lineEdit 中删除validator。如果你还想用

edit.setValidator(new QIntValidator(0,100));

然后你可以删除它:

ui->lineEdit->setValidator(new Validator);
QValidator *vaal = const_cast<QValidator *>(ui->lineEdit->validator());//validator returns const, we use const_cast to avoid problems
vaal->deleteLater();

(const_cast<QValidator *>(ui->lineEdit->validator()))->deleteLater();
//here we just does not create unnecessary QValidator *vaal

其中 Validator 是一个子类:

Validator::~Validator()
{
qDebug() <<"~Validator";
}

输出是:

~Validator 

或者只使用:

Validator *vaal = new Validator;
ui->lineEdit->setValidator(vaal);
ui->lineEdit->setValidator(0);
vaal->deleteLater();

输出相同。

此外,当您使用 setValidator 时,QLineEdit 不会取得此 validator 的所有权。看下一段代码:

ui->lineEdit->setValidator(new QIntValidator(0,100,this));
qDebug() << ui->lineEdit->validator()->parent();

我的输出:MainWindow(0x28fdc8, name = "MainWindow") 如您所见,它不是 lineEdit!

ui->lineEdit->setValidator(new QIntValidator(0,100));
qDebug() << ui->lineEdit->validator()->parent();

输出是:QObject(0x0)

删除 validator 仅由您负责。

关于c++ - 重置 QValidator 是否会泄漏内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27257027/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com