qdi*_*dii 1 c++ synchronization std stringbuffer
struct encrypt_stream : public std::stringbuf
{
int sync() { encrypt_buffer(); flush_to_device(); }
...
private:
void encrypt_buffer();
void flush_to_device();
};
Run Code Online (Sandbox Code Playgroud)
我想编写这个类来加密文本数据。每次stringbuf刷新该对象时,sync都会调用该对象并将缓冲区的加密版本发送到设备。flush加密文本很大程度上取决于调用的时刻。是否存在flush不需要用户请求就可以调用该对象的棘手情况?
我知道收到flush后会被调用std::endl,但是还有其他我不知道的情况吗?
flush()在这些情况下被调用:
std::endl使用(即显式调用std::ostream::flush()) [\xc2\xa727.7.3.7/7]tie()执行读取时。[\xc2\xa727.7.2.1.3/2]overflow()调用when将内容提取到外部设备,[\xc2\xa727.6.3.4.5/3]gptr() == egptr(),调用underflow()来丢弃内容并将其缓冲区与外部设备同步。[\xc2\xa727.6.3.4.3/7]这就是我对标准 IOStreams 的了解。这可能会根据流或流缓冲区的实现而有所不同。
\n