79

我最近发现它std::strstream已被弃用,取而代之的是std::stringstream. 我已经有一段时间没有使用它了,但它做了我当时需要做的事情,所以听到它被弃用感到很惊讶。

我的问题是为什么做出这个决定,以及std::stringstream提供了哪些没有的好处std::strstream

4

4 回答 4

99

strstream返回的 a很难char *管理,因为它没有说明它是如何分配的。因此不可能知道您是否应该删除它或调用 free() 或完全做其他事情。关于释放它的唯一真正令人满意的方法是将其交还给strstreamviafreeze()函数。这是不够明显的,很多人都弄错了。返回一个管理自身的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. 我认为strstreams 已被弃用,因为可能会发生缓冲区溢出,这会std::string自动防止。

于 2010-05-12T15:25:55.113 回答
7

从我个人的角度来看,我不止一次看到了模糊的内存损坏,这些损坏需要数天或数周才能找到并最终归结为使用strstream. 一旦它被替换,stringstream腐败就消失了,我没有再问任何问题!这对我来说已经足够了。

于 2010-10-15T10:04:01.430 回答