Почему был станд.:: strstream удержан от использования?

Я недавно обнаружил это std::strstream был удержан от использования в пользу std::stringstream. Это было некоторое время, так как я использовал его, но это сделало то, что я должен был сделать в то время, так был удивлен услышать о его депрекации.

Мой вопрос состоит в том, почему было это решение, принятое, и какие преимущества делает std::stringstream обеспечьте, что отсутствуют в std::strstream?

69
задан andand 15 April 2017 в 21:58
поделиться

3 ответа

strstream вернул char * , с которым было очень трудно работать, поскольку нигде не было сказано, как это были выделены. Таким образом, было невозможно узнать, следует ли вам удалить его, вызвать free () или сделать что-то совсем другое. Единственный действительно удовлетворительный способ освободить его - это передать его обратно strstream с помощью функции freeze () . Это было настолько неочевидно, что многие ошибались. stringstream возвращает строковый объект, который управляет самим собой, что гораздо менее подвержено ошибкам.

Также существовала проблема использования end для завершения строки, но я считаю, что проблема освобождения памяти была основной причиной отказа от поддержки.

93
ответ дан 24 November 2019 в 13:49
поделиться

Более простое понимание управления памятью. (Кто-нибудь может вспомнить, кто отвечает за освобождение выделенной памяти и в каких условиях?)

(Обратите внимание, что поскольку strstream все еще предоставляет что-то, чего нет в других местах, он будет продолжать присутствовать в C++0X - по крайней мере, в последний раз, когда я проверял проект, это было так).

15
ответ дан 24 November 2019 в 13:49
поделиться

A strstream строит char * . A std :: stringstream строит std :: string . Я полагаю, что strstream устарели из-за возможности переполнения буфера, что автоматически предотвращает std :: string .

11
ответ дан 24 November 2019 в 13:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: