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 ?
Qt 6.11 is out! See what's new in the release blog

Deallocate memory to singleton class which access database ?

Scheduled Pinned Locked Moved Solved C++ Gurus
35 Posts 5 Posters 24.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

    @jsulm Okay thanks. but still i am getting below errors:

    "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;

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

    @Qt-embedded-developer

    SqliteManagerBGSync();
    cleanup();
    

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


    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
    0
    • 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

                                          • Login

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