最近std::strstream
は廃止され、std::stringstream
。使ってからしばらく経ちましたが、当時必要だったことをやっていたので、その廃止を聞いて驚きました。
私の質問は、なぜこの決定がなされたのか、そしてどのようなメリットがあるのかstd::stringstream
は、std::strstream
?
strstream
は、_char *
_を返しましたが、どのように割り当てられたのかはどこにも記載されていなかったため、管理が非常に困難でした。したがって、それを削除する必要があるのか、free()を呼び出す必要があるのか、まったく別のことをするのかを知ることは不可能でした。割り当てを解除する唯一の本当に満足のいく方法については、freeze()
関数を介してstrstream
に戻すことでした。これは十分に非自明であり、多くの人が間違ったことをしました。 stringstream
は、それ自体を管理する文字列オブジェクトを返します。これにより、エラーがはるかに少なくなります。
ends
を使用して文字列を終了する必要があるという問題もありましたが、割り当て解除の問題が非推奨の主な理由だったと思います。
メモリ管理を理解しやすくします。 (割り当てられたメモリを解放する責任者とその条件を誰かが覚えていますか?)
(strstreamはまだ他の場所では利用できないものを提供しているので、C++ 0Xに存在し続けることに注意してください-少なくとも前回ドラフトをチェックしたときは)。
strstream
はchar *
を構築します。 std::stringstream
はstd::string
を構築します。 strstream
sは、std::string
が自動的に防止するバッファーオーバーフローの可能性があるため、非推奨になっていると思います。
個人的な観点から、複数の機会において、追跡に数日または数週間を要し、最終的にはstrstream
の使用に至った不明瞭なメモリ破損を目にしました。 stringstream
に置き換えられるとすぐに、破損はなくなり、私はそれ以上質問しませんでした!それで十分でした。