Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Special Interest Groups
  3. C++ Gurus
  4. Deallocate memory to singleton class which access database ?
Forum Updated to NodeBB v4.3 + New Features

Deallocate memory to singleton class which access database ?

Scheduled Pinned Locked Moved Solved C++ Gurus
35 Posts 5 Posters 4.6k Views
  • 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.
  • Q Qt embedded developer

    @J-Hilk ,@jsulm ,@jsulm ,@KroMignon Thanks for enormous support.

    i have written like it below and now its not show any error:

    void SqliteManagerBGSync::cleanup()
    {
    for (short int i =0 ; i<sizeof(sqliteManagerMap);i++)
    {
        delete sqliteManagerMap[i];
    }
    sqliteManagerMap.clear();
    
    }
    
    J.HilkJ Offline
    J.HilkJ Offline
    J.Hilk
    Moderators
    wrote on last edited by
    #24

    @Qt-embedded-developer
    using sizeof is almost certainly wrong here.

    std::map has a size() function, please use that.
    https://en.cppreference.com/w/cpp/container/map/size


    Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


    Q: What's that?
    A: It's blue light.
    Q: What does it do?
    A: It turns blue.

    1 Reply Last reply
    3
    • Q Qt embedded developer

      @KroMignon i can not enable it like that because any change like that not allowed in my device.

      KroMignonK Offline
      KroMignonK Offline
      KroMignon
      wrote on last edited by KroMignon
      #25

      @Qt-embedded-developer said in Deallocate memory to singleton class which access database ?:

      i can not enable it like that because any change like that not allowed in my device.

      As @jsulm already wrote before, replace auto with the corresponding type:

      for(std::map<int,SqliteManagerBGSync*>::iterator it = sqliteManagerMap::begin(); it != sqliteManagerMap::end(); ++it)
      {
      ...
      }
      

      It is an old maxim of mine that when you have excluded the impossible, whatever remains, however improbable, must be the truth. (Sherlock Holmes)

      J.HilkJ Q 3 Replies Last reply
      1
      • KroMignonK KroMignon

        @Qt-embedded-developer said in Deallocate memory to singleton class which access database ?:

        i can not enable it like that because any change like that not allowed in my device.

        As @jsulm already wrote before, replace auto with the corresponding type:

        for(std::map<int,SqliteManagerBGSync*>::iterator it = sqliteManagerMap::begin(); it != sqliteManagerMap::end(); ++it)
        {
        ...
        }
        
        J.HilkJ Offline
        J.HilkJ Offline
        J.Hilk
        Moderators
        wrote on last edited by J.Hilk
        #26

        @KroMignon IIRC range based for loops is a c++11 feature in itself 🤔

        never mind, I think need a break!


        Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


        Q: What's that?
        A: It's blue light.
        Q: What does it do?
        A: It turns blue.

        KroMignonK 1 Reply Last reply
        0
        • J.HilkJ J.Hilk

          @KroMignon IIRC range based for loops is a c++11 feature in itself 🤔

          never mind, I think need a break!

          KroMignonK Offline
          KroMignonK Offline
          KroMignon
          wrote on last edited by
          #27

          @J-Hilk said in Deallocate memory to singleton class which access database ?:

          IIRC range based for loops is a c++11 feature in itself 🤔

          Are you sure? I don't believe that std::map<>::iterator support is comming with C++11.

          It is an old maxim of mine that when you have excluded the impossible, whatever remains, however improbable, must be the truth. (Sherlock Holmes)

          jsulmJ 1 Reply Last reply
          0
          • KroMignonK KroMignon

            @J-Hilk said in Deallocate memory to singleton class which access database ?:

            IIRC range based for loops is a c++11 feature in itself 🤔

            Are you sure? I don't believe that std::map<>::iterator support is comming with C++11.

            jsulmJ Offline
            jsulmJ Offline
            jsulm
            Lifetime Qt Champion
            wrote on last edited by
            #28

            @KroMignon I think @J-Hilk misunderstood your code: you are not using range based loop

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

            1 Reply Last reply
            1
            • KroMignonK KroMignon

              @Qt-embedded-developer said in Deallocate memory to singleton class which access database ?:

              i can not enable it like that because any change like that not allowed in my device.

              As @jsulm already wrote before, replace auto with the corresponding type:

              for(std::map<int,SqliteManagerBGSync*>::iterator it = sqliteManagerMap::begin(); it != sqliteManagerMap::end(); ++it)
              {
              ...
              }
              
              Q Offline
              Q Offline
              Qt embedded developer
              wrote on last edited by Qt embedded developer
              #29

              @KroMignon Here inside for loop i need to write

              for(std::map<int,SqliteManagerBGSync*>::iterator it = sqliteManagerMap::begin(); it != sqliteManagerMap::end(); ++it)
              {
              delete it;
              }
              
              

              or what i need to write to deallocate memory ?

              jsulmJ KroMignonK 2 Replies Last reply
              0
              • Q Qt embedded developer

                @KroMignon Here inside for loop i need to write

                for(std::map<int,SqliteManagerBGSync*>::iterator it = sqliteManagerMap::begin(); it != sqliteManagerMap::end(); ++it)
                {
                delete it;
                }
                
                

                or what i need to write to deallocate memory ?

                jsulmJ Offline
                jsulmJ Offline
                jsulm
                Lifetime Qt Champion
                wrote on last edited by
                #30

                @Qt-embedded-developer said in Deallocate memory to singleton class which access database ?:

                delete it;

                delete it->second;

                of course

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

                1 Reply Last reply
                1
                • Q Qt embedded developer

                  @KroMignon Here inside for loop i need to write

                  for(std::map<int,SqliteManagerBGSync*>::iterator it = sqliteManagerMap::begin(); it != sqliteManagerMap::end(); ++it)
                  {
                  delete it;
                  }
                  
                  

                  or what i need to write to deallocate memory ?

                  KroMignonK Offline
                  KroMignonK Offline
                  KroMignon
                  wrote on last edited by KroMignon
                  #31

                  @Qt-embedded-developer said in Deallocate memory to singleton class which access database ?:

                  or what i need to write to deallocate ?

                  Please, take time to read std::map<> documentation.
                  You are using a map iterator, so it is a container object which gives you access to key and value.

                  delete it do not make sense!

                  You want to delete the pointer hold in the value part: delete it->second

                  It is an old maxim of mine that when you have excluded the impossible, whatever remains, however improbable, must be the truth. (Sherlock Holmes)

                  Q 1 Reply Last reply
                  3
                  • KroMignonK KroMignon

                    @Qt-embedded-developer said in Deallocate memory to singleton class which access database ?:

                    or what i need to write to deallocate ?

                    Please, take time to read std::map<> documentation.
                    You are using a map iterator, so it is a container object which gives you access to key and value.

                    delete it do not make sense!

                    You want to delete the pointer hold in the value part: delete it->second

                    Q Offline
                    Q Offline
                    Qt embedded developer
                    wrote on last edited by Qt embedded developer
                    #32
                    This post is deleted!
                    1 Reply Last reply
                    0
                    • KroMignonK KroMignon

                      @Qt-embedded-developer said in Deallocate memory to singleton class which access database ?:

                      i can not enable it like that because any change like that not allowed in my device.

                      As @jsulm already wrote before, replace auto with the corresponding type:

                      for(std::map<int,SqliteManagerBGSync*>::iterator it = sqliteManagerMap::begin(); it != sqliteManagerMap::end(); ++it)
                      {
                      ...
                      }
                      
                      Q Offline
                      Q Offline
                      Qt embedded developer
                      wrote on last edited by
                      #33

                      @KroMignon Hi when i put sqliteManagerMap::begin() and sqliteManagerMap::end() i am getting error .

                      like below :

                      for(std::map<int,SqliteManagerBGSync *>::iterator it = sqliteManagerMap::begin(); it != sqliteManagerMap::end(); ++it)

                      but when i put sqliteManagerMap.begin() then i am getting no error.

                      jsulmJ KroMignonK 2 Replies Last reply
                      0
                      • Q Qt embedded developer

                        @KroMignon Hi when i put sqliteManagerMap::begin() and sqliteManagerMap::end() i am getting error .

                        like below :

                        for(std::map<int,SqliteManagerBGSync *>::iterator it = sqliteManagerMap::begin(); it != sqliteManagerMap::end(); ++it)

                        but when i put sqliteManagerMap.begin() then i am getting no error.

                        jsulmJ Offline
                        jsulmJ Offline
                        jsulm
                        Lifetime Qt Champion
                        wrote on last edited by
                        #34

                        @Qt-embedded-developer said in Deallocate memory to singleton class which access database ?:

                        sqliteManagerMap::begin() and sqliteManagerMap::end()

                        As already explained in your other thread: begin() and end() are non-static methods, so you call them with . not :: !
                        Please learn C++ and read documentation!

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

                        1 Reply Last reply
                        1
                        • Q Qt embedded developer

                          @KroMignon Hi when i put sqliteManagerMap::begin() and sqliteManagerMap::end() i am getting error .

                          like below :

                          for(std::map<int,SqliteManagerBGSync *>::iterator it = sqliteManagerMap::begin(); it != sqliteManagerMap::end(); ++it)

                          but when i put sqliteManagerMap.begin() then i am getting no error.

                          KroMignonK Offline
                          KroMignonK Offline
                          KroMignon
                          wrote on last edited by
                          #35

                          @Qt-embedded-developer said in Deallocate memory to singleton class which access database ?:

                          for(std::map<int,SqliteManagerBGSync *>::iterator it = sqliteManagerMap::begin(); it != sqliteManagerMap::end(); ++it)

                          Sorry my fault, as @jsulm already told, this are not static class methods. You want to call class instance methode:

                          for(std::map<int,SqliteManagerBGSync *>::iterator it = sqliteManagerMap.begin(); it != sqliteManagerMap.end(); ++it)
                          

                          Was a long day yesterday!

                          It is an old maxim of mine that when you have excluded the impossible, whatever remains, however improbable, must be the truth. (Sherlock Holmes)

                          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