Does QValidator leak memory?

I'm curious if anyone knows if by deleting it QValidatorby resetting it to zero there will be a memory leak. The QT documentation mentions that the validator is “deleted”, but does this also mean that it is deleted?

An example of what I mean ...

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

// .... use the line edit

edit.setValidator(0);
+4
source share
2 answers

No, 0does not delete validator, deletes only validatorfrom lineEdit. If you still want to use

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

then you can delete it with:

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();

or

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

where validatoris the subclass with:

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

Output:

~Validator 

Or just use:

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

The conclusion is the same.

, 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 - .

+3

, e. :.

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

QLineEdit .

0

All Articles