Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Memory free
Forum Updated to NodeBB v4.3 + New Features

Memory free

Scheduled Pinned Locked Moved Solved General and Desktop
36 Posts 7 Posters 4.0k Views 3 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • J Joe von Habsburg

    @JonB said in Memory free:

    sth

    some sth was QObject, some sth was kind of list (QVector<double> *). My opinion, I cleared list when I delete MyClass, but they took the memory and did not release.

    // did not work
    ~MyClass(){
      sthPointer->deleteLater();
      sthPointer = nullptr;
    
      sthList->clear();
      sthList = nullptr;
    }
    
    //Work
    ~MyClass(){
      sthPointer->deleteLater();
      sthPointer = nullptr;
    
      delete sthList;
    }
    
    Christian EhrlicherC Offline
    Christian EhrlicherC Offline
    Christian Ehrlicher
    Lifetime Qt Champion
    wrote on last edited by
    #27

    @Joe-von-Habsburg said in Memory free:

    I cleared list when I delete MyClass, but they took the memory and did not release.

    Which is basic c++. Why do you create the container on the heap at all? That's unusual, not needed and error prone as you can see.

    Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
    Visit the Qt Academy at https://academy.qt.io/catalog

    J 1 Reply Last reply
    3
    • Christian EhrlicherC Christian Ehrlicher

      @Joe-von-Habsburg said in Memory free:

      I cleared list when I delete MyClass, but they took the memory and did not release.

      Which is basic c++. Why do you create the container on the heap at all? That's unusual, not needed and error prone as you can see.

      J Offline
      J Offline
      Joe von Habsburg
      wrote on last edited by Joe von Habsburg
      #28

      @Christian-Ehrlicher said in Memory free:

      Which is basic c++. Why do you create the container on the heap at all? That's unusual, not needed and error prone as you can see.

      I have 2 thing. Firstly a class => MyClass
      Secondly => ClassController (another QObject)

      My system like that:

      //MyClass
      class MyClass : QObject{
       MyClass(){
      someThingPointer = new SomeThingPointer ;
         someThingList = new SomeThingList<double>;
       };
      ~MyClass(){
      someThingPointer->deleteLater();
          delete someThingList ;
       };
      
      void doSth();
      
      private :
       SomeThingPointer *someThingPointer;
       SomeThingList<double> *someThingList;
      }
      
      //ClassController
      class ClassController: QObject{
       ClassController();
      ~ClassController();
      
      void run();
      
      public slots:
      void addNew();
      void deleteLast();
      
      private :
      QList<MyClass *> myClasses;
      }
      
      
      //MainWindow
      void on_add_click(){
       emit addNew();
      }
      
      void on_delete_click(){
       emit deleteLast();
      }
      

      Where should I create new list? I create in constructer

      @Christian-Ehrlicher said in Memory free:

      Why do you create the container on the heap at all?

      What do you mean by that? Can you explain?

      jsulmJ 1 Reply Last reply
      0
      • J Joe von Habsburg

        @Christian-Ehrlicher said in Memory free:

        Which is basic c++. Why do you create the container on the heap at all? That's unusual, not needed and error prone as you can see.

        I have 2 thing. Firstly a class => MyClass
        Secondly => ClassController (another QObject)

        My system like that:

        //MyClass
        class MyClass : QObject{
         MyClass(){
        someThingPointer = new SomeThingPointer ;
           someThingList = new SomeThingList<double>;
         };
        ~MyClass(){
        someThingPointer->deleteLater();
            delete someThingList ;
         };
        
        void doSth();
        
        private :
         SomeThingPointer *someThingPointer;
         SomeThingList<double> *someThingList;
        }
        
        //ClassController
        class ClassController: QObject{
         ClassController();
        ~ClassController();
        
        void run();
        
        public slots:
        void addNew();
        void deleteLast();
        
        private :
        QList<MyClass *> myClasses;
        }
        
        
        //MainWindow
        void on_add_click(){
         emit addNew();
        }
        
        void on_delete_click(){
         emit deleteLast();
        }
        

        Where should I create new list? I create in constructer

        @Christian-Ehrlicher said in Memory free:

        Why do you create the container on the heap at all?

        What do you mean by that? Can you explain?

        jsulmJ Online
        jsulmJ Online
        jsulm
        Lifetime Qt Champion
        wrote on last edited by
        #29

        @Joe-von-Habsburg said in Memory free:

        What do you mean by that? Can you explain?

        Basic C++ stuff:

        // This creates a member variable which is a pointer to a list
        // If you then do someThingList = new ... you allocate memory on the heap
        SomeThingList<double> *someThingList;
        

        And the question was: why do you allocate someThingList on the heap? So, why is someThingList a pointer and not simply:

        SomeThingList<double> someThingList;
        

        Don't use pointers if they are not really needed...

        https://forum.qt.io/topic/113070/qt-code-of-conduct

        J 1 Reply Last reply
        1
        • jsulmJ jsulm

          @Joe-von-Habsburg said in Memory free:

          What do you mean by that? Can you explain?

          Basic C++ stuff:

          // This creates a member variable which is a pointer to a list
          // If you then do someThingList = new ... you allocate memory on the heap
          SomeThingList<double> *someThingList;
          

          And the question was: why do you allocate someThingList on the heap? So, why is someThingList a pointer and not simply:

          SomeThingList<double> someThingList;
          

          Don't use pointers if they are not really needed...

          J Offline
          J Offline
          Joe von Habsburg
          wrote on last edited by
          #30

          @jsulm said in Memory free:

          Don't use pointers if they are not really needed...

          Because I couldn't change the indexes. When I first created this class for the first time, it was simple (no pointers). But then I realized that I can't change the indexes.

          void run(){
            for(int i = 0; i < myClasses.size(); i++){
              MyClass *mc = myClasses.at(i);
              mc->someThingList()[25] = 10000;
            }
          }
          

          Do you have an advice?

          jsulmJ 1 Reply Last reply
          0
          • J Joe von Habsburg

            @jsulm said in Memory free:

            Don't use pointers if they are not really needed...

            Because I couldn't change the indexes. When I first created this class for the first time, it was simple (no pointers). But then I realized that I can't change the indexes.

            void run(){
              for(int i = 0; i < myClasses.size(); i++){
                MyClass *mc = myClasses.at(i);
                mc->someThingList()[25] = 10000;
              }
            }
            

            Do you have an advice?

            jsulmJ Online
            jsulmJ Online
            jsulm
            Lifetime Qt Champion
            wrote on last edited by
            #31

            @Joe-von-Habsburg said in Memory free:

            Because I couldn't change the indexes.

            What does this have to do with pointers?
            This should work just fine (don't know why you put () there):

            mc->someThingList[25] = 10000;
            

            But as far as I can see you did not explain what SomeThingList is exactly.

            https://forum.qt.io/topic/113070/qt-code-of-conduct

            J 1 Reply Last reply
            2
            • jsulmJ jsulm

              @Joe-von-Habsburg said in Memory free:

              Because I couldn't change the indexes.

              What does this have to do with pointers?
              This should work just fine (don't know why you put () there):

              mc->someThingList[25] = 10000;
              

              But as far as I can see you did not explain what SomeThingList is exactly.

              J Offline
              J Offline
              Joe von Habsburg
              wrote on last edited by Joe von Habsburg
              #32

              @jsulm said in Memory free:

              don't know why you put () there

              because it is private and access with getter.

              @jsulm said in Memory free:

              What does this have to do with pointers?

              It could not work, but I will try again for you :)

              Thanks for eveything

              @jsulm said in Memory free:

              What does this have to do with pointers?

              I tested. for example :

              for(int i = 0; i < myClasses.size(); i++){
                MyClass *mc = myClasses.at(i);
                for(int j = 0; j < size; j++){
                  mc ->myList().append(x);
                }
                qDebug() << mc ->myList().size(); // 0
              }
              

              I can't add new data to mc ->myList() in classcontroller

              jsulmJ S 2 Replies Last reply
              0
              • J Joe von Habsburg

                @jsulm said in Memory free:

                don't know why you put () there

                because it is private and access with getter.

                @jsulm said in Memory free:

                What does this have to do with pointers?

                It could not work, but I will try again for you :)

                Thanks for eveything

                @jsulm said in Memory free:

                What does this have to do with pointers?

                I tested. for example :

                for(int i = 0; i < myClasses.size(); i++){
                  MyClass *mc = myClasses.at(i);
                  for(int j = 0; j < size; j++){
                    mc ->myList().append(x);
                  }
                  qDebug() << mc ->myList().size(); // 0
                }
                

                I can't add new data to mc ->myList() in classcontroller

                jsulmJ Online
                jsulmJ Online
                jsulm
                Lifetime Qt Champion
                wrote on last edited by
                #33

                @Joe-von-Habsburg said in Memory free:

                qDebug() << mc ->myList().size(); // 0

                If you mean size() returns 0 then this simply means that size variable has 0 as value, so the inner for loop is never executed. Another explanation would be that myList() returns a COPY of the container, so you add to the copy (it should either return pointer to the container or reference). Again, has nothing to do with pointers...

                https://forum.qt.io/topic/113070/qt-code-of-conduct

                J 1 Reply Last reply
                1
                • jsulmJ jsulm

                  @Joe-von-Habsburg said in Memory free:

                  qDebug() << mc ->myList().size(); // 0

                  If you mean size() returns 0 then this simply means that size variable has 0 as value, so the inner for loop is never executed. Another explanation would be that myList() returns a COPY of the container, so you add to the copy (it should either return pointer to the container or reference). Again, has nothing to do with pointers...

                  J Offline
                  J Offline
                  Joe von Habsburg
                  wrote on last edited by Joe von Habsburg
                  #34

                  @jsulm said in Memory free:

                  so the inner for loop is never executed. Another explanation would be that myList() returns a COPY of the container, so you add to the copy (it should either return pointer to the container or reference). Again, has nothing to do with pointers...

                  how can I append new data to my list ? when I use pointer list, its work, but if do not use pointer, I can not append new data

                  @SimonSchroeder said in Memory free:

                  it will create a copy that is returned and you'll only change the copy. With a reference you'll change the underlying list:

                  thank you

                  jsulmJ 1 Reply Last reply
                  0
                  • J Joe von Habsburg

                    @jsulm said in Memory free:

                    don't know why you put () there

                    because it is private and access with getter.

                    @jsulm said in Memory free:

                    What does this have to do with pointers?

                    It could not work, but I will try again for you :)

                    Thanks for eveything

                    @jsulm said in Memory free:

                    What does this have to do with pointers?

                    I tested. for example :

                    for(int i = 0; i < myClasses.size(); i++){
                      MyClass *mc = myClasses.at(i);
                      for(int j = 0; j < size; j++){
                        mc ->myList().append(x);
                      }
                      qDebug() << mc ->myList().size(); // 0
                    }
                    

                    I can't add new data to mc ->myList() in classcontroller

                    S Offline
                    S Offline
                    SimonSchroeder
                    wrote on last edited by
                    #35

                    @Joe-von-Habsburg said in Memory free:

                    I can't add new data to mc ->myList() in classcontroller

                    You need to make sure that MyClass::myList() returns a reference to the list. If you have something like:

                    class MyClass
                    {
                      //...
                      SomeThingList<double> myList() { return someThingList; }
                    }
                    

                    it will create a copy that is returned and you'll only change the copy. With a reference you'll change the underlying list:

                    class MyClass
                    {
                      //...
                      SomeThingList<double>& myList() { return someThingList; }
                    }
                    
                    1 Reply Last reply
                    3
                    • J Joe von Habsburg

                      @jsulm said in Memory free:

                      so the inner for loop is never executed. Another explanation would be that myList() returns a COPY of the container, so you add to the copy (it should either return pointer to the container or reference). Again, has nothing to do with pointers...

                      how can I append new data to my list ? when I use pointer list, its work, but if do not use pointer, I can not append new data

                      @SimonSchroeder said in Memory free:

                      it will create a copy that is returned and you'll only change the copy. With a reference you'll change the underlying list:

                      thank you

                      jsulmJ Online
                      jsulmJ Online
                      jsulm
                      Lifetime Qt Champion
                      wrote on last edited by
                      #36

                      @Joe-von-Habsburg You should really learn C++.
                      See what @SimonSchroeder wrote...

                      https://forum.qt.io/topic/113070/qt-code-of-conduct

                      1 Reply Last reply
                      1

                      • Login

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • Users
                      • Groups
                      • Search
                      • Get Qt Extensions
                      • Unsolved