Deallocate memory to singleton class which access database ?
-
@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 .
@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
-
@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(); }
@Qt-embedded-developer Then you can't use auto, write the type instead of auto
-
@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
@KroMignon i can not enable it like that because any change like that not allowed in my device.
-
@KroMignon i can not enable it like that because any change like that not allowed in my device.
@Qt-embedded-developer than do a normal for(x; x<y; ++x) loop
-
@Qt-embedded-developer than do a normal for(x; x<y; ++x) loop
@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-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(); }
@Qt-embedded-developer
usingsizeof
is almost certainly wrong here.std::map has a size() function, please use that.
https://en.cppreference.com/w/cpp/container/map/size -
@KroMignon i can not enable it like that because any change like that not allowed in my device.
@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) { ... }
-
@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) { ... }
@KroMignon
IIRC range based for loops is a c++11 feature in itself 🤔never mind, I think need a break!
-
@KroMignon
IIRC range based for loops is a c++11 feature in itself 🤔never mind, I think need a break!
@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. -
@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.@KroMignon I think @J-Hilk misunderstood your code: you are not using range based loop
-
@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) { ... }
@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 ?
-
@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 ?
@Qt-embedded-developer said in Deallocate memory to singleton class which access database ?:
delete it;
delete it->second;
of course
-
@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 ?
@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
-
@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
This post is deleted! -
@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) { ... }
@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.
-
@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.
@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! -
@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.
@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!