std::map.find() は、ある場合は見つかった要素に、ない場合は end() に map::iterator を返すことを目的としています。BadPtr が返ってきます。コードの他の部分でも、まったく同じ構成が正常に機能します。これは何ですか?
class OntologyContainer {
map<string, OntologyClass*> data;
OntologyClass* last_added;
public:
class iterator : public std::iterator<bidirectional_iterator_tag, OntologyClass> {
map<string, OntologyClass*>::iterator itr;
public:
iterator(map<string, OntologyClass*>::iterator it) : itr(it) { }
...
}
iterator begin() {
return iterator(data.begin());
}
iterator end() {
return iterator(data.end());
}
iterator Find(const string & to_find) {
map<string, OntologyClass*>::iterator it = data.find(to_find);
// this is where it fails
return iterator(it);
}
map::iterator は、演算子 * および -> を作成するためにラップされ、それぞれ OntologyClass オブジェクトとポインターを返します。
OntologyClass& operator* () {
return *(itr->second);
}
OntologyClass* operator->() {
return itr->second;
}