Liberare risorse in chiusura QMainWindow
-
wrote on 16 Jan 2019, 14:06 last edited by
ciao!
quando si crea una finestra usando il file di layout (il file .ui per intenderci) viene sempre creato un distruttore con questo dentro:
DialogAdd::~DialogAdd() { delete ui; }
da quanto ho capito serve appunto per liberare le risorse occupate dalla finestra.
io ho creato una QMainWindow senza file .ui, e mi chiedevo come dovrei liberare le risorse.
avevo provato banalmente con questo, ma va in crash quando chiudo il programma:MainWindow::~MainWindow() { delete this; }
-
wrote on 16 Jan 2019, 18:08 last edited by
Il fatto di allocare / liberare memoria prescinde dal fatto che si utilizzi il file .ui per gestire la grafica.
Se crei con new devi eseguire delete, se invece non usi il new alla chiusura del dialog la memoria si libera.
Se hai dubbi puoi compilare il modo debug ed usare valgrid per trovare eventuali memory leak. -
wrote on 17 Jan 2019, 10:11 last edited by
ciao!
si si, questo lo so.
mettiamola cosi: il dubbio รจ se devo farlo per tutti gli oggetti, o se per qualche oggetto va a cascata.
ad esempio:exitAction = new QAction(tr("E&xit"), this); addSyncAction = new QAction(tr("&Aggiungi sync"), this); refreshAction = new QAction(tr("&Rinfresca sync"), this); aboutAction = new QAction(tr("&About"), this); tbl = new QTableWidget(); resEdit = new QPlainTextEdit;
ho messo tutti gli oggetti su cui uso il new nella finestra.
devo fare la delete per tutti?? -
wrote on 17 Jan 2019, 10:18 last edited by
Ciao, no, se lasci li crei in riferimento al dialog "this", una volta che killi il dialog esso uccide tutti i componenti a lui legati, quindi non serve che lo fai te.
E' un sistema utilizzato anche in Delphi e Freepascal. -
Ciao, no, se lasci li crei in riferimento al dialog "this", una volta che killi il dialog esso uccide tutti i componenti a lui legati, quindi non serve che lo fai te.
E' un sistema utilizzato anche in Delphi e Freepascal.wrote on 17 Jan 2019, 10:36 last edited by@mrdebug said in Liberare risorse in chiusura QMainWindow:
Ciao, no, se lasci li crei in riferimento al dialog "this", una volta che killi il dialog esso uccide tutti i componenti a lui legati, quindi non serve che lo fai te.
E' un sistema utilizzato anche in Delphi e Freepascal.perfetto grazie!!
2/5