Re: Problem in deleting entries from Hash_set
Prafulla T wrote:
for (hash_set<UserType*>::iterator hashIt = hashSet.begin();
hashIt != hashSet.end(); hashIt++)
{
UserType *pUserType = *hashIt;
hashIt++;
delete pUserType;
pUserType = NULL;
}
OK. First of all you cannot use hash_set.begin(). hash_set<> is the type
not instantiated object! If this worked, that code below would also work
!!!
template <class T>
struct A {
void begin() {}
};
int main() {
//! A.f(); // very baaaad :P
A<int> a;
a.f(); // correct
}
So you have to have an instantiated object of hash_set<UserType*>
somewhere ... let's say it's:
hash_set<UserType*> hsutp;
Before I write the code a few things to be said.
* you increments iterator two times, in for definition and in code
inside the loop !!!
* you are trying to delete object pointed by pUserType, which has not
been created dynamically by operator new !!!
* you compare pointers of two different objects, UserType with container
hash_set !!!
Now having said that all, if I understand you, your code should look
like below (roughly):
// ...
hash_set<UserType*> hsutp; // it can be any name used by you
// I assume u have done something on
// this object !!!
// ...
for (hash_set<UserType*>::iterator hashIt = hsutp.begin();
hashIt != hsutp.end(); ++hashIt) {
delete *hashIt;
*hashIt = 0;
}
Best.