Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Liberare risorse in chiusura QMainWindow



  • 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;
    }
    


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



  • 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??



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



  • @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!!


Log in to reply