[Cuppa-users:116] Re: VC6のバグ?

アーカイブの一覧に戻る

Shin'ya MORINO smori****@datam*****
2002年 8月 28日 (水) 14:26:22 JST


森野@胡瓜担当 です。

FUKUDA Fumikiさんの<20020****@tmg01*****>から
>>VC6+SP5でBuildして胡瓜一発目でいきなり落ちるハメになりました。
ご報告ありがとうございます。

>さんきゅーです。胡瓜担当のうろたえる様が目に浮かびます^^;
おろおろです。
あしは、ガクガク、三回ぐらいすっころびながら、走ってきました。

>>調べてみると、
>>...
>>erase()によってvectorのend()が変化するのがSTLとして正しいのかがポ
>>イントになると思われますが、どうなのでしょうか?
>
>つか、要素の追加/削除によってイテレータが狂うんですよね。

はい。
で、erase()後、すべてのiteratorは、invalidateされるとのこと。 < ISO/IEC

>>ただ報告だけというのも何なので解決策を自分なりに考えてみました。
>>上記の対応としては、if 文の中身を
>>metit = defit->methods_.erase(metit);
>>にするというので良いでしょうか?
>
>おそらくそれでおっけー。

とりあえず、デストラクタは、本来、一個しかないものなので、デストラクタの削除
後、すぐbreakすることにします。

curie.cpp--------------------------------------------------------------------
void Curie::checkClassDefs() {
  // remove dtor.
  for (ClassDefs::iterator defit = classDefs_.begin(); defit != classDefs_.end(); ++defit){
    for (Methods::iterator metit = defit->methods_.begin();  
         metit != defit->methods_.end(); ++metit){
      if (metit->name_.at(0) == '~'){
	defit->methods_.erase(metit);
	break;
      }
    }
  }
}
-----------------------------------------------------------------------------

-------
森野慎也  mailto:smori****@datam*****



Cuppa-users メーリングリストの案内
アーカイブの一覧に戻る