下面的「刪除」語句是否「雙重釋放」一個對象?「刪除」語句是否會雙倍釋放一個對象?
(...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;
}
}
我問這個問題,因爲erase()
上述聲明應該稱爲對象的析構函數和釋放它已經,不應該嗎?
謝謝你的回答! 我有這個問題,因爲在另一個程序中,我使用地圖,當我調用erase()從地圖中刪除對象*時,我解引用了一個對象*時程序崩潰。 (我正在使用VC++ 6),所以我想知道是否矢量