boost::wtokenizer禁じ手
以下のようなコードは決して書いてはいけない・・少なくともVC2008では・・
boost::char_separator<wchar_t> separator_backslash( L"\\" ); wstring str(L"c:\\one\\two\\sample.bmp"); boost::wtokenizer parser( str, separator_backslash ); boost::wtokenizer::iterator iter = parser.begin(); str = *iter; // はい、死んだー for( ; iter != parser.end(); iter++ ); //まともにイテレートできなくなる。例外発生
このケースではどうやらwtokenizerがパーズを行った後もパーズ対象文字列へのポインタを使って処理をしているようなかんじである。なので元のwstringオブジェクトへパーザーイテレータを用いて値を代入したりすると、元文字列へのアドレス参照ができなくなりこうなるんだろう。実装見てないけど。他のイテレータでもそうだっけ?