Ответ 1
Классы из <strstream>
являются отвратительными для использования. Когда они были более популярными, я не видел никакого правильного производства (ну, они были исправлены, когда я обнаружил проблемы). Либо люди не завершили строку с помощью std::ends
, либо не освободили память, используя s.freeze(0)
(или, чаще всего, оба). Хотя класс <sstream>
создает копию, я не нашел, что это проблема.
В случае, если распределение памяти действительно имеет значение для вашего прецедента, либо потому, что вам нужно выделять большие куски, либо потому, что у вас их много, вы можете легко управлять и считывать данные или записывать их в буферы, которые вы предоставляете, используя настраиваемый поток буфер. Например, запись буфера потока для быстрого выделения блока памяти тривиально:
struct omembuf
: std::streambuf {
{
omembuf(char* base, std::size_t size) {
this->setp(base, base + size);
}
char* begin() const { return this->pbase(); }
char* end() const { return this->pptr(); }
};