Est-ce que l'instruction "delete" ci-dessous "double gratuitement" un objet?La déclaration "delete" libère-t-elle doublement un objet?
(...object_list is a global vector<object*>...)
vector< object * >::iterator it, eit, iter;
object *p_object;
vector< object * > dead_objects;
it = object_list_.begin();
eit = object_list_.end();
//---collect pointers of all dead objects to dead_objects vector
for (; it != eit; it++)
{
p_object = *it;
if (p_object->is_dead() == false)
continue;
dead_objects.push_back(p_object);
}
//---free every dead object from the global object_list
for (iter = dead_objects.begin(); iter != dead_objects.end(); iter++)
{
p_object = *iter;
it = object_list_.begin();
eit = object_list_.end();
for (; it != eit; it++)
{
if (*it != p_object)
continue;
object_list_.erase(it);
delete p_object;
break;
}
}
Je pose la question parce que la déclaration erase()
aurait dû appeler au-dessus du destructor d'un objet et libéré déjà, devrait-il pas?
merci pour la réponse !! J'ai eu la question parce que dans un autre programme j'utilise la carte et le programme a planté quand j'ai déréférencé un objet * après que j'ai appelé erase() pour enlever l'objet * de la carte. (J'utilise VC++ 6) donc je me demande si le vecteur