2005-01-08 [長年日記]

[C++] STLportのhash_mapのiterator

STLportのhash_mapのiteratorをインクリメントするときにキーが壊れていると正しくインクリメントできません。例えばこんな感じ。

struct X {
};

typedef std::hash_map<X*, int> M;
M m;
m.insert(M::value_type(new X(), 0));

for (M::iterator it = m.begin(); it != m.end(); ++it)
  delete (*it).first;

インクリメントした後でdeleteすれば大丈夫です。

for (M::iterator it = m.begin(); it != m.end(); ) {
  std::auto_ptr<X> p((*it).first);
  ++it;
}

std::mapだと前者でも問題にならないので結構はまりました。

[]