【发布时间】: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 并根据是否设置
verbose从std::cout或虚拟流有条件地分配oss。除非您需要刷新输出,否则不要使用endl。
标签: c++ ostringstream