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.1k 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 yes i understood that. but to deallocate memory for below 2 statement i need example.

    std::map<int,sqlite3 *> sqliteHandleMap;

    static std::map<int,SqliteManagerBGSync *> sqliteManagerMap;

    i have tried to implement deallocate memory for them like below function in that class like below :

    SqliteManagerBGSync::cleanup()
    {
    for (const auto& kv : sqliteManagerMap) {
        delete kv.second;
    }
    sqliteManagerMap.clear();
    
    }
    

    but it gives me many errors like below:

            ^
    

    "src\SqliteManagerBGSync.h", line 42: Error: #260-D: explicit type is missing ("int" assumed)
    cleanup();
    ^
    "src\SqliteManagerBGSync.cpp", line 25: Error: #260-D: explicit type is missing ("int" assumed)
    SqliteManagerBGSync::cleanup()
    ^
    "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;
    ^
    "src\SqliteManagerBGSync.cpp", line 32: Error: #940-D: missing return statement at end of non-void function "app::dbmanager::SqliteManagerBGSync::cleanup"
    }

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

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

    SqliteManagerBGSync::cleanup()

    C++ basics: return type is missing...

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

    Q 1 Reply Last reply
    1
    • jsulmJ jsulm

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

      SqliteManagerBGSync::cleanup()

      C++ basics: return type is missing...

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

      @jsulm hi jsulm i am returning nothing. my return type is void.

      jsulmJ 1 Reply Last reply
      0
      • Q Qt embedded developer

        @jsulm hi jsulm i am returning nothing. my return type is void.

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

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

        my return type is void.

        Then write void there. Come on this is really basic stuff...

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

        Q 1 Reply Last reply
        1
        • jsulmJ jsulm

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

          my return type is void.

          Then write void there. Come on this is really basic stuff...

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

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

          KroMignonK J.HilkJ 2 Replies Last reply
          0
          • 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;

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

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

            Okay thanks. but still i am getting below errors:

            Do your compiler support C++11 and did you enable C++11 support (eg. add CONFIG += c++11 in your PRO file)?

            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
            2
            • KroMignonK KroMignon

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

              Okay thanks. but still i am getting below errors:

              Do your compiler support C++11 and did you enable C++11 support (eg. add CONFIG += c++11 in your PRO file)?

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

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

                                          • Login

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