Когда вызывается stringbuf :: flush?

struct encrypt_stream : public std::stringbuf
{
int sync() { encrypt_buffer(); flush_to_device(); }
...
private:
void encrypt_buffer();
void flush_to_device();
};

Я хочу написать этот класс для шифрования текстовых данных. Каждый раз это stringbuf объект покраснел, sync вызывается и зашифрованная версия буфера отправляется на устройство. Зашифрованный текст сильно зависит от того момента, когда flush называется. Есть ли сложные случаи, когда flush может быть вызван для этого объекта без запроса пользователя?

я знаю это flush называется когда std::endl получено, но есть ли другие случаи, о которых я не знаю?

0

Решение

flush() вызывается в следующих ситуациях:

  • когда std::endl используется (а именно явный вызов std::ostream::flush()) [§27.7.3.7 / 7]
  • Когда вызывается деструктор потока [§27.5.3.1.6 / 4]
  • Когда поток, к которому это tie()-ед выполняет чтение. [§27.7.2.1.3 / 2]
  • Когда файловый поток перемещен.
  • Когда поток достиг максимально выделенных символов в своем буфере, когда overflow() вызывается для извлечения контента на внешнее устройство, [§27.6.3.4.5 / 3]
  • или в случае входных потоков, когда gptr() == egptr()вызов underflow() удалить содержимое и синхронизировать его буфер с внешним устройством. [§27.6.3.4.3 / 7]

Это то, что я знаю о стандартных IOStreams. Это может варьироваться в зависимости от реализации вашего потока или потокового буфера.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]