stringstream的清空
来源:互联网 发布:混沌战域美人进阶数据 编辑:程序博客网 时间:2024/04/30 15:44
代码示例
- int main()
- {
- int size = 100;
- stringstream strStream;
- for (int i = 0; i < size; ++i)
- {
- strStream << i;
- string numStr;
- strStream >> numStr;
- strStream.clear();
- }
- printf("size=%d\n", strStream.str().capacity());
- return 0;
- }
现象&后果
从打印的信息看,strStream占用的内存空间在持续增长。当size较大时,程序消耗内存将迅速增长。
Bug分析
上述代码中,在for循环中每次调用strStream.clear()是希望在每次使用完strStream之后清理strStream占用的资源,但stringstream的clear方法并没有真正地释放strStream占用的空间,这样strStream所占用的空间一直在增长。当size较大时,strStream消耗的内存迅速增长,可能出现严重问题。
实际上,如果希望strStream释放空间,可以调用str("")方法来重置stringstream占用的内存。
正确代码
- int main()
- {
- int size = 100;
- stringstream strStream;
- for (int i = 0; i < size; ++i)
- {
- strStream << i;
- string numStr;
- strStream >> numStr;
- strStream.str("");
- }
- printf("size=%d\n", strStream.str().capacity());
- return 0;
- }
编程建议
使用stringstream对象可以简化类型转换,如上面例子代码中int到string的转换,但在多次转换中,使用同一个stringstream对象,需要使用其对象方法str来重置stringstream的buffer,这样能确保stringstream占用的内存不会越积越多。
From:http://book.51cto.com/art/201311/419430.htm
0 0
- stringstream的清空
- stringstream的清空问题
- stringstream 的清空操作
- 关于stringstream流的清空问题
- stringStream清空缓存的方法
- 使用stringstream时的清空操作
- c++ stringstream 的clear()清空误区
- C++stringstream的clear()清空误区
- 清空stringstream对象的内容
- C++stringstream的clear()清空误区
- stringstream清空缓存
- 清空stringstream缓存
- stringstream 清空 方法
- 清空stringstream缓存
- 清空stringstream缓存
- stringstream类内部的缓冲区正确的清空方式
- stringstream的清空操作,注意clear()的使用
- 注意使用stringstream时的清空操作
- 鸟哥私房菜实践(3)- RAID
- 神经网络
- 将博客搬至CSDN
- 二十大数据可视化工具点评
- Unity3D 多渠道打包资料
- stringstream的清空
- jquery ajax的data参数
- android多用户
- Android-ViewPagerIndicator自定义tab数量
- golang 生成随机数,时间种子改进型
- Substitution failure is not an error
- HDU 4035 Maze 树形概率DP 2011年成都网络赛E题
- iOS代码行数统计
- 那么你呢?