Я недавно обнаружил это std::strstream
был удержан от использования в пользу std::stringstream
. Это было некоторое время, так как я использовал его, но это сделало то, что я должен был сделать в то время, так был удивлен услышать о его депрекации.
Мой вопрос состоит в том, почему было это решение, принятое, и какие преимущества делает std::stringstream
обеспечьте, что отсутствуют в std::strstream
?
strstream
вернул char *
, с которым было очень трудно работать, поскольку нигде не было сказано, как это были выделены. Таким образом, было невозможно узнать, следует ли вам удалить его, вызвать free () или сделать что-то совсем другое. Единственный действительно удовлетворительный способ освободить его - это передать его обратно strstream
с помощью функции freeze ()
. Это было настолько неочевидно, что многие ошибались. stringstream
возвращает строковый объект, который управляет самим собой, что гораздо менее подвержено ошибкам.
Также существовала проблема использования end
для завершения строки, но я считаю, что проблема освобождения памяти была основной причиной отказа от поддержки.
Более простое понимание управления памятью. (Кто-нибудь может вспомнить, кто отвечает за освобождение выделенной памяти и в каких условиях?)
(Обратите внимание, что поскольку strstream все еще предоставляет что-то, чего нет в других местах, он будет продолжать присутствовать в C++0X - по крайней мере, в последний раз, когда я проверял проект, это было так).
A strstream
строит char *
. A std :: stringstream
строит std :: string
. Я полагаю, что strstream
устарели из-за возможности переполнения буфера, что автоматически предотвращает std :: string
.