我最近发现它std::strstream
已被弃用,取而代之的是std::stringstream
. 我已经有一段时间没有使用它了,但它做了我当时需要做的事情,所以听到它被弃用感到很惊讶。
我的问题是为什么做出这个决定,以及std::stringstream
提供了哪些没有的好处std::strstream
?
我最近发现它std::strstream
已被弃用,取而代之的是std::stringstream
. 我已经有一段时间没有使用它了,但它做了我当时需要做的事情,所以听到它被弃用感到很惊讶。
我的问题是为什么做出这个决定,以及std::stringstream
提供了哪些没有的好处std::strstream
?
strstream
返回的 a很难char *
管理,因为它没有说明它是如何分配的。因此不可能知道您是否应该删除它或调用 free() 或完全做其他事情。关于释放它的唯一真正令人满意的方法是将其交还给strstream
viafreeze()
函数。这是不够明显的,很多人都弄错了。返回一个管理自身的stringstream
字符串对象,这更不容易出错。
还有不得不使用ends
来终止字符串的问题,但我相信释放问题是弃用的主要原因。
更容易理解内存管理。(有人能记得谁负责释放分配的内存以及在什么条件下?)
(请注意,由于 strstream 仍然提供其他地方没有的东西,它将继续出现在 C++0X 中——至少在我上次检查草稿时是这样)。
Astrstream
构建一个char *
. Astd::stringstream
构建一个std::string
. 我认为strstream
s 已被弃用,因为可能会发生缓冲区溢出,这会std::string
自动防止。
从我个人的角度来看,我不止一次看到了模糊的内存损坏,这些损坏需要数天或数周才能找到并最终归结为使用strstream
. 一旦它被替换,stringstream
腐败就消失了,我没有再问任何问题!这对我来说已经足够了。