为什么不推荐使用std :: strstream?

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

我的问题是为什么做出这个决定, std::stringstream提供了std::strstream中缺less的好处吗?

strstream返回了一个非常难以pipe理的char * ,因为没有说明它是如何分配的。 因此不可能知道你是否应该删除它,或者打电话给free()或者完全做其他事情。 关于释放它的唯一真正令人满意的方式是通过freeze()函数将其交给strstream 。 这是非常不明显的,很多人都错了。 stringstream返回一个pipe理自己的string对象,这个对象的错误要less得多。

还有一个问题,就是不得不用ends来终止这个string,但是我认为解除分配问题是造成这个问题的主要原因。

更容易理解内存pipe理。 (有人可以记住谁是谁负责释放分配的内存和在哪些条件?)

(请注意,由于strstream仍提供其他地方无法提供的内容,因此它将继续以C ++ 0X的forms出现 – 至less上次我检查了它的草稿)。

strstream构build一个char *std::stringstream生成一个std::string 。 我想strstream是不推荐使用,因为缓冲区溢出的可能性, std::string自动阻止。

从不止一次的个人angular度来看,我已经看到了模糊的内存损坏,需要几天或几周的时间来追踪,最终归结为使用strstream 。 一旦它被stringstream取代,腐败消失了,我没有再问任何问题! 这对我来说就够了。