代码之家  ›  专栏  ›  技术社区  ›  andand

为什么不推荐std::strstream?

  •  67
  • andand  · 技术社区  · 16 年前

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

    我的问题是,为什么做出这个决定,有什么好处 标准::字符串流 规定不在 STD:斯特劳斯 ?

    4 回复  |  直到 9 年前
        1
  •  92
  •   Dan Nissenbaum AndrewMcLagan    12 年前

    这个 strstream 返回A char * 这是很难管理的,因为它没有说明它是如何分配的。因此,不可能知道您是应该删除它,还是对它调用free(),还是完全执行其他操作。唯一真正令人满意的方法是把它交回 斯特劳斯 通过 freeze() 功能。这是非常不明显的,很多人都错了。这个 stringstream 返回一个字符串对象,该对象管理自身,这样更不容易出错。

    还有一个问题就是必须使用 ends 终止字符串,但我认为释放问题是取消预测的主要原因。

        2
  •  15
  •   AProgrammer    16 年前

    更容易理解内存管理。(有人记得谁负责释放分配的内存,在什么情况下?)

    (注意,当StruScript仍然提供其他地方不可用的东西时,它将继续存在于C++0X中——至少上次我检查了它的草案)。

        3
  •  11
  •   Ken Bloom    16 年前

    一 strstream 建立一个 char * . 一 std::stringstream 建立一个 std::string . 我想 斯特劳斯 由于可能发生缓冲区溢出,因此不推荐使用 STD::字符串 自动阻止。

        4
  •  7
  •   Component 10    16 年前

    从个人的角度来看,我不止一次看到了模糊的记忆腐败现象,花了几天或几周的时间来追查,最终找到了使用 strstream . 一旦替换为 stringstream 腐败消失了,我没有再问任何问题!这对我来说已经足够了。

    推荐文章