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

    I have seen that my project code is use singleton class to access database.

    I want to free the memory allocated by this class how to do it ? can any body give example for that ?

    #ifndef SQLMANAGER_H_
    #define SQLMANAGER_H_
    
    #include <boomer.h>
    #include <sqlite/sqlite3.h>
    #include <vector>
    #include <string>
    #include "Header/AFCSTicket.h"
    //#include "Error.h"
    
    using namespace std;
    
    namespace app
    {
    namespace dbmanager
    {
    
    class SqliteManager {
    
    public :
    	static	SqliteManager* GetDBInstance();
    	sqlite3* handle;
    	sqlite3_stmt *statement;
    	static sqlite3* getDataBaseHandle();
    
    	int prepareStatement(const char *query);
    	int openDatabase();
    	void closeDatabase();
    	boomer::transaction::TransactionResult connectToDataBase(std::string fileName, sqlite3* &handle);
    	boomer::transaction::TransactionResult disconnectDataBase(sqlite3* &handle);
    	void closeDatabaseForDBBackup();
    private:
    	SqliteManager();
    	static SqliteManager* iSqlInstanceDB;
    
    };
    }
    
    }
    #endif
    
    
    
    #include "SqliteManager.h"
    #include <stdio.h>
    #include <string>
    
    
    using namespace std;
    
    using namespace boomer::error;
    
    const char* DB_PATH_MAIN = "CONFIG.DB";
    
    namespace app
    {
    namespace dbmanager
    {
    SqliteManager* SqliteManager::iSqlInstanceDB = NULL;
    SqliteManager::SqliteManager()
    {
    	handle = NULL;
    }
    
    SqliteManager* SqliteManager::GetDBInstance()
    {
    	DBGF_TRACE("SqliteManager::GetDBInstance _heap_max() = %d",_heap_max());
    	DBGF_TRACE("SqliteManager::GetDBInstance _heap_current() = %d",_heap_current());
    
    	if ( iSqlInstanceDB == NULL ) {
    		iSqlInstanceDB = new SqliteManager();
    		DBGF_TRACE("SqliteManager::GetDBInstance _heap_max() = %d",_heap_max());
    	  DBGF_TRACE("SqliteManager::GetDBInstance _heap_current() = %d",_heap_current());
    	}
    	else
    	{
    	DBGF_TRACE("SqliteManager::GetDBInstance _heap_max() = %d",_heap_max());
    	DBGF_TRACE("SqliteManager::GetDBInstance _heap_current() = %d",_heap_current());
    	}
    	return iSqlInstanceDB;
    }
    
    int SqliteManager::openDatabase()
    {
    	int memused = sqlite3_memory_used();
        DBGF_TRACE("AFCS:SqliteManager::closeDatabase()::memused=%d",memused);
    
    	if(handle != NULL)
    	{
    		DBGF_TRACE("before SqliteManager::openDatabase _heap_max() = %d",_heap_max());
    		DBGF_TRACE("before SqliteManager::openDatabase _heap_current() = %d",_heap_current());
    
    
    		int val = sqlite3_db_release_memory(handle);
    
    	    memused = sqlite3_memory_used();
    		DBGF_TRACE("AFCS:SqliteManager::closeDatabase()::memused=%d",memused);
    
    		DBGF_TRACE("SqliteManager::openDatabase sqlite3_db_cacheflush val = %d",val);
    
    		DBGF_TRACE("SqliteManager::openDatabase _heap_max() = %d",_heap_max());
    		DBGF_TRACE("SqliteManager::openDatabase _heap_current() = %d",_heap_current());
    		return SUCCESS;
    	}
    
    	int res = sqlite3_open(DB_PATH_MAIN, &handle);
    	if(res != SQLITE_OK)
    	{
      	DBGF_TRACE("SqliteManager::openDatabase _heap_max() = %d",_heap_max());
    		DBGF_TRACE("SqliteManager::openDatabase _heap_current() = %d",_heap_current());
    		ERROR_RETURN(0);
    	}
    	else
    	{
    		DBGF_TRACE("openDatabase _heap_max() = %d",_heap_max());
    	  DBGF_TRACE("openDatabase _heap_current() = %d",_heap_current());
    
    	    if(sqlite3_exec(handle, "PRAGMA journal_mode = WAL;PRAGMA  cache_size = 100000;", NULL, 0, NULL) == SQLITE_OK)
    		{
    	    DBGF_TRACE("SQLITE QUERY SUCCESS: PRAGMA journal_mode = WAL;PRAGMA  cache_size = 100000;");
    			DBGF_TRACE("openDatabase _heap_max() = %d",_heap_max());
    		  DBGF_TRACE("openDatabase _heap_current() = %d",_heap_current());
    			return SUCCESS;
    		}
    		else
    		{
    			DBGF_TRACE("SQLITE QUERY FAIL: PRAGMA journal_mode = WAL;PRAGMA  cache_size = 100000;");
    			DBGF_TRACE("openDatabase _heap_max() = %d",_heap_max());
    			DBGF_TRACE("openDatabase _heap_current() = %d",_heap_current());
    
    			ERROR_RETURN(0);
    		}
    		DBGF_TRACE("openDatabase _heap_max() = %d",_heap_max());
    		DBGF_TRACE("openDatabase _heap_current() = %d",_heap_current());
    		return SUCCESS;
    	}
    
    }
    
    int SqliteManager::prepareStatement(const char *query)
    {
    	if(openDatabase() != SUCCESS)
    	{
    		ERROR_RETURN(0);
    	}
    
    	statement = NULL;
    	int res = sqlite3_prepare_v2(handle, query, -1, &statement, 0);
    
    	if(res != SQLITE_OK)
    	{
    		sqlite3_finalize(statement);
    		statement = NULL;
    
    		ERROR_RETURN(0);
    
    	}else{
    		return SUCCESS;
    	}
    }
    
    
    void SqliteManager::closeDatabase()
    {
    	DBGF_TRACE("_heap_max() = %d",_heap_max());
        DBGF_TRACE("_heap_current() = %d",_heap_current());
    	//	if (handle != NULL)
    	//	{
    	//		if(sqlite3_close(handle) == SQLITE_OK)
    	//		{
    	//			DBGF_TRACE("Close Database Success: %s", sqlite3_errmsg(handle));
    	//			handle = NULL;
    	//		}
    	//		else
    	//			LOGF_ERROR("Close Database Error: %s", sqlite3_errmsg(handle));
    	//	}
    }
    
    boomer::transaction::TransactionResult SqliteManager::connectToDataBase(std::string dbFilename , sqlite3* &handle)
    {
    	int res = 0;
    	res = sqlite3_open(dbFilename.c_str(), &handle);
    	if( res != SQLITE_OK )
    	{
    		ERROR_RETURN(CONFIG_DB_CONNECT_FAILED);
    	}
    
    	return boomer::transaction::trOk;
    }
    
    boomer::transaction::TransactionResult SqliteManager::disconnectDataBase(sqlite3* &handle)
    {
    	long errCode = 0;
    	//Disconnect to DataBase
    	int res = sqlite3_close(handle);
    	if(res)
    	{
    		errCode = CONFIG_DB_DISCONNECT_FAILED;
    		return res;
    	}
    	handle = NULL;
    	return boomer::transaction::trOk;
    }
    void SqliteManager::closeDatabaseForDBBackup()
    {
    	DBGF_TRACE("AFCS:SqliteManager::closeDatabaseForDBBackup()");
    	if (handle != NULL)
    	{
    		if(sqlite3_close(handle) == SQLITE_OK)
    		{
    			DBGF_TRACE("closeDatabaseForDBBackup::Close Database Success: %s", sqlite3_errmsg(handle));
    			handle = NULL;
    		}
    		else
    		{
    			//LOGF_ERROR("closeDatabaseForDBBackup::Close Database Error: %s", sqlite3_errmsg(handle));
    		}
    	}
    }
    
    }
    
    }
    
    J.HilkJ Offline
    J.HilkJ Offline
    J.Hilk
    Moderators
    wrote on last edited by J.Hilk
    #8

    @Qt-embedded-developer deleting a singleton instance is not a trivial matter, you have to follow proper guidelines, or you program may explode.

    I would suggest reading and following
    https://www.interviewsansar.com/singleton-class-delete-design/


    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

      @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

                                          • Login

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