Do I need to delete QObjects?



  • Do I need to delete explicitly QObjects like in below code or Qt take care of that memory mangement by itself?

    void myClass:startTimer() {
      auto timer = new QTimer(this);
      timer->setInterval(1000*5);
       timer->setSingleShot(true);
      bool ok = connect(timer,  &QTtimer::timeout, [=]() {  loop->quit(); });
     assert(ok);
     timer->start();
     // do something 
     loop->quit();
    }
    

  • Qt Champions 2017

    Hi
    When you assign a parent, you should not delete it manually. Parent will
    new QTimer(this); << this is owner.
    http://doc.qt.io/qt-5/objecttrees.html


  • Lifetime Qt Champion

    Hi,

    The timer object will get automatically delete when its parent also is but the way you do it, you'll be filling up memory with QTimer objects each time you call your startTimer function. So either delete it explicitly at the end of the method or use a stack variable.



  • An alternative is to connect(timer, &QTimer::timeout,timer, &QTimer::deleteLater);

    P.S.
    You don't need to assert the return of connect when you use Qt5 connect syntax, the compiler will "static assert" it for you


  • Moderators

    For this particular example, you don't need to create a QTimer object at all, so there is nothing to delete. Just use the static function, QTimer::singleShot().

    Your 6 lines of code can be reduced to 1 line:

        QTimer::singleShot(  1000*5,  [=]{ loop->quit(); }  );
    

Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.