79

std::strstream私は最近、が推奨されなくなったことを発見しましたstd::stringstream。使用してからしばらく経ちましたが、当時の私が必要としていたことを実行できたので、非推奨と聞いて驚きました。

私の質問は、なぜこの決定が下されたのかということstd::stringstreamですstd::strstream

4

4 に答える 4

99

strstream返された a は、どのchar *ように割り当てられたかがどこにも記載されていなかったため、管理が非常に困難でした。したがって、それを削除するべきか、それに対して free() を呼び出すべきか、それともまったく別のことをすべきかを知ることは不可能でした。割り当てを解除するための唯一の満足できる方法は、関数strstream経由で戻すことでした。freeze()これは十分に自明ではないため、多くの人が誤解していました。はstringstream、それ自体を管理する文字列オブジェクトを返します。これにより、エラーが発生しにくくなります。

文字列を終了するために を使用する必要があるという問題もありましたendsが、非推奨の主な理由は割り当て解除の問題だったと思います。

于 2010-05-12T15:29:00.347 に答える
16

メモリ管理が理解しやすくなります。(割り当てられたメモリを解放する責任者とその条件を誰か覚えていますか?)

(strstream はまだ他の場所では利用できないものを提供しているため、C++0X にも引き続き存在することに注意してください。少なくとも最後にドラフトを確認したときはそうでした)。

于 2010-05-12T15:26:12.583 に答える
12

Astrstreamは を構築しchar *ます。Astd::stringstreamは を構築しstd::stringます。strstreamバッファオーバーフローの可能性があるため、 s は非推奨であると思います。これは自動的std::stringに防止されます。

于 2010-05-12T15:25:55.113 に答える
7

個人的な観点から、私は何度も、追跡するのに数日または数週間かかり、最終的にはを使用するようになった、あいまいなメモリの破損を目にしましたstrstream。それが腐敗に置き換えられるとすぐにstringstream消えて、私はこれ以上質問をしませんでした!それで十分でした。

于 2010-10-15T10:04:01.430 に答える