【问题标题】:Does ostringstream object need to be cleared?ostringstream 对象是否需要清除?
【发布时间】:2017-05-01 13:18:15
【问题描述】:

我在长时间运行的应用程序中使用ostringstream 对象将调试信息打印到标准输出。我根据命令行参数(例如,详细标志)切换应用程序是否实际打印和清除 ostringstream 对象。当详细开关未被断言时,我仍然写入ostringstream 对象,但我从未清除它。

我想弄清楚这有多糟糕,以及我是否应该更加小心地清理对象?是否有任何负面影响,例如使用过多的内存?

// example code 
ostringstream oss;
while (1){
    oss << " still alive " << endl;
    if (verbose) { cout << oss.str(); oss.str("") } 
}

【问题讨论】:

  • 好吧,如果你从不清空它,最终你会消耗掉你所有的内存。
  • 我们应该如何知道您是否使用了过多的内存?
  • 根据命令行标志设置一次输出流然后总是无条件地写入该流可能是一个更好的解决方案。
  • @KerrekSB 我没有这样做 b/c 我想避免在包含大量循环的代码部分中进行大量条件测试
  • 在使用流式 I/O 时担心条件的性能可能会适得其反。考虑实现no-op stream 并根据是否设置verbosestd::cout 或虚拟流有条件地分配oss。除非您需要刷新输出,否则不要使用endl

标签: c++ ostringstream


【解决方案1】:

显然,当您继续在流中插入数据时,它会消耗更多内存,在某些时候可能会很多。

清除它可以防止这种情况发生。

【讨论】:

    猜你喜欢
    • 2014-08-06
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 2011-07-14
    • 2013-05-18
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多