为什么不推荐使用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
取代,腐败消失了,我没有再问任何问题! 这对我来说就够了。