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