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 6.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.
  • J.HilkJ J.Hilk

    @Qt-embedded-developer

    SqliteManagerBGSync();
    cleanup();
    

    both are missing the return type, and also make sure to fix them in the *.cpp file as well!

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

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