Esempio:È necessario eliminare QValidator manualmente?
QDoubleValidator *validator = new QDoubleValidator();
myInputLineEdit->setValidator(validator);
// delete validator;
Nota: myInputLineEdit è un puntatore QLineEdit e sarà eliminato con il suo genitore.
La mia domanda è, quando devo eliminare il validatore, poiché è stato creato manualmente e setValidator() non sembra assumere la proprietà di questo puntatore in base alla documentazione? Se non lo elimini, sarà una perdita di memoria?
Ho provato a eliminarlo subito dopo, come il codice commentato, e ho notato che il validatore di myInputLineEdit è diventato 0 dopo. Quindi penso che potrebbe essere necessario cancellarlo dopo che myInputLineEdit è stato eliminato.
Un altro pensiero è, potrei dare un genitore di validatore in modo che venga cancellato insieme al suo parrent, è un buon modo per farlo? E se non ci fosse un buon candidato come genitore?
Grazie
Se sei interessato al motivo per cui 'setValidator' non ne diventa proprietario: è probabilmente perché puoi usare lo stesso validatore per più widget di input, quindi è un po 'di proprietà * condivisa *.Ma QObjects non ha una proprietà condivisa, ma invece * unique * parent-ownership, quindi è necessario impostare il genitore su * some * widget (o la modifica della riga o un genitore di essa, qualsiasi cosa abbia più senso). – leemes