deque<hoge*>::iterator current_it(hoge_set.begin();
for(;current_it!=hoge_set.end();++current_it)
if(hoge(*current_it)) {delete (*current_it); *current_it = static_cast<hoge*>(0);}
といったん消して、ゼロをセットする。
hoge_set.erase(remove(hoge_set.begin(),hoge_set.end(),static_cast<hoge*>(0)),hoge_set.end());
でもってゼロのやつだけまとめて消すってんでダメか?