Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何释放stringstream资源?_C++_String_Memory Management_Stream_Stringstream - Fatal编程技术网

C++ 如何释放stringstream资源?

C++ 如何释放stringstream资源?,c++,string,memory-management,stream,stringstream,C++,String,Memory Management,Stream,Stringstream,我有两条线。一个将数据写入stringstream,另一个从中读取数据 经过一些尝试和错误,我发现这种方法“吞噬”了我的内存,因为底层字符串似乎无限增长(直到std::bad_alloc) 从stringstream读取后,如何释放不再使用的基线字符串部分?我知道了 myStringStream.str (std::string ()); myStringStream.clear (); 释放字符串。但这也会擦除到目前为止尚未读取的数据 我是否应该时不时地创建一个新字符串并复制(尚未使用的)数

我有两条线。一个将数据写入stringstream,另一个从中读取数据

经过一些尝试和错误,我发现这种方法“吞噬”了我的内存,因为底层字符串似乎无限增长(直到std::bad_alloc)

从stringstream读取后,如何释放不再使用的基线字符串部分?我知道了

myStringStream.str (std::string ());
myStringStream.clear ();
释放字符串。但这也会擦除到目前为止尚未读取的数据

我是否应该时不时地创建一个新字符串并复制(尚未使用的)数据?还是stringstream是一种愚蠢的方法

编辑:


谢谢你提到替代品。我知道队列和环形缓冲区。然而,我对何时选择它们而不是另一种解决方案不是很有经验。但目前的情况是:您不会选择流方法,是吗?

是否必须使用流在线程之间进行通信?标准的方法是使用队列,让生产者线程将字符串(或任何需要的内容)写入队列,消费者从队列中读取。我可以做的是通过队列传输数据,然后从(排队的)数据创建一个stringstream并解析它们。缺点是,数据的长度并不总是相同的。因此,我决定使用一个信号量来通知读取线程它可以执行它的工作。否则,这将为您的用例演示一个循环缓冲区解决方案:看起来像[duplicate][1]。当您需要队列时,不应该使用strstream。[1]: