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 7.0k 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 i have changed it . i have used void, But still i am getting as below mentioned error:

    "src\SqliteManagerBGSync.cpp", line 27: Error: #260-D: explicit type is missing ("int" assumed)
    for (const auto& kv : sqliteManagerMap) {
    ^
    "src\SqliteManagerBGSync.cpp", line 27: Error: #252: reference variable "kv" requires an initializer
    for (const auto& kv : sqliteManagerMap) {
    ^
    "src\SqliteManagerBGSync.cpp", line 27: Error: #65: expected a ";"
    for (const auto& kv : sqliteManagerMap) {
    ^
    "src\SqliteManagerBGSync.cpp", line 27: Error: #29: expected an expression
    for (const auto& kv : sqliteManagerMap) {
    ^
    "src\SqliteManagerBGSync.cpp", line 27: Error: #65: expected a ";"
    for (const auto& kv : sqliteManagerMap) {
    ^
    "src\SqliteManagerBGSync.cpp", line 28: Error: #153: expression must have class type
    delete kv.second;

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

    @Qt-embedded-developer As @KroMignon already asked you: do you have a C++11 capable compiler? And is C++11 activated?

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

    Q 1 Reply Last reply
    1
    • jsulmJ jsulm

      @Qt-embedded-developer As @KroMignon already asked you: do you have a C++11 capable compiler? And is C++11 activated?

      Q Offline
      Q Offline
      Qt embedded developer
      wrote on last edited by Qt embedded developer
      #18

      @jsulm no i have not. So what i have to change in below function:

      SqliteManagerBGSync::cleanup()
      {
      for (const auto& kv : sqliteManagerMap) {
          delete kv.second;
      }
      sqliteManagerMap.clear();
      
      }
      
      jsulmJ 1 Reply Last reply
      0
      • Q Qt embedded developer

        @KroMignon Hi i am not using qt . and sorry i can not enable C++ 11 because my compiler not support it. i can access map like std::map .

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

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

        Hi i am not using qt . and sorry i can not enable C++ 11. i can access map like std::map .

        The problem is not std::map<>() but the way you iterate through the map: for (const auto& kv : sqliteManagerMap) requires at least C++11 support enabled! (cf. https://en.cppreference.com/w/cpp/container/map)

        I don't know which kind of C++ compiler you are using, for GCC for example enabling C++11 is done with -std=c++11 or -std=gnu++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)

        Q 1 Reply Last reply
        3
        • Q Qt embedded developer

          @jsulm no i have not. So what i have to change in below function:

          SqliteManagerBGSync::cleanup()
          {
          for (const auto& kv : sqliteManagerMap) {
              delete kv.second;
          }
          sqliteManagerMap.clear();
          
          }
          
          jsulmJ Offline
          jsulmJ Offline
          jsulm
          Lifetime Qt Champion
          wrote on last edited by
          #20

          @Qt-embedded-developer Then you can't use auto, write the type instead of auto

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

            Hi i am not using qt . and sorry i can not enable C++ 11. i can access map like std::map .

            The problem is not std::map<>() but the way you iterate through the map: for (const auto& kv : sqliteManagerMap) requires at least C++11 support enabled! (cf. https://en.cppreference.com/w/cpp/container/map)

            I don't know which kind of C++ compiler you are using, for GCC for example enabling C++11 is done with -std=c++11 or -std=gnu++11

            Q Offline
            Q Offline
            Qt embedded developer
            wrote on last edited by
            #21

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

            J.HilkJ KroMignonK 2 Replies Last reply
            0
            • Q Qt embedded developer

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

              J.HilkJ Offline
              J.HilkJ Offline
              J.Hilk
              Moderators
              wrote on last edited by
              #22

              @Qt-embedded-developer than do a normal for(x; x<y; ++x) loop


              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.

              Q 1 Reply Last reply
              1
              • J.HilkJ J.Hilk

                @Qt-embedded-developer than do a normal for(x; x<y; ++x) loop

                Q Offline
                Q Offline
                Qt embedded developer
                wrote on last edited by
                #23

                @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 1 Reply Last reply
                0
                • 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