为什么std :: strstream已被弃用?

时间:2010-05-12 15:21:50

标签: c++ stringstream strstream

我最近发现std::strstream已被弃用,而不是std::stringstream。自从我使用它已经有一段时间了,但它确实做了我当时需要做的事情,所以听到它的弃用感到惊讶。

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

4 个答案:

答案 0 :(得分:92)

strstream返回了一个非常难以管理的char *,因为它没有说明它是如何分配的。因此,无法知道您是应该删除它还是在其上调用free()或完全执行其他操作。关于解除分配的唯一真正令人满意的方法是通过strstream函数将其交回freeze()。这是非常明显的,很多人都弄错了。 stringstream返回一个管理自身的字符串对象,这不容易出错。

还有一个问题是必须使用ends来终止字符串,但我认为解除分配问题是弃用的主要原因。

答案 1 :(得分:15)

更容易理解内存管理。 (有人可以记住谁负责释放分配的内存以及在哪些情况下?)

(请注意,由于strstream仍提供其他地方无法提供的内容,因此它将继续存在于C ++ 0X中 - 至少上次检查草稿时是这样。)

答案 2 :(得分:11)

strstream构建char *std::stringstream构建std::string。我认为strstream被弃用了,因为缓冲区溢出的可能性是std::string自动阻止的。

答案 3 :(得分:7)

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