¿Por qué se desactivó std :: strstream?

Recientemente descubrí que std::strstream ha quedado en desuso en favor de std::stringstream . Ha pasado un tiempo desde que lo usé, pero hizo lo que tenía que hacer en ese momento, por lo que me sorprendió escuchar su desaprobación.

Mi pregunta es por qué se tomó esta decisión, y qué beneficios ofrece std::stringstream que están ausentes de std::strstream ?

La strstream devolvió un char * que era muy difícil de manejar, ya que en ninguna parte se indicaba cómo se había asignado. Por lo tanto, era imposible saber si debería eliminarlo o llamar a free () o hacer algo completamente diferente. La única manera realmente satisfactoria de desasignarlo fue devolvérselo a la strstream través de la función freeze() . Esto fue lo suficientemente obvio, que mucha gente lo entendió mal. La stringstream devuelve un objeto de cadena que se gestiona a sí mismo, que es mucho menos propenso a errores.

También estaba la cuestión de tener que usar los ends para terminar la cadena, pero creo que el problema de desasignación fue la razón principal de la depreciación.

Más fácil de entender la gestión de la memoria. (¿Puede alguien recordar quién es responsable de liberar la memoria asignada y en qué condiciones?)

(Tenga en cuenta que como strstream aún proporciona algo que no está disponible en otro lado, seguirá estando presente en C ++ 0X, al menos la última vez que verifiqué el borrador).

A strstream crea un char * . Un std::stringstream crea una std::string . Supongo que strstream s están en desuso debido a la posibilidad de un desbordamiento de búfer, algo que std::string previene automáticamente.

Desde una perspectiva personal en más de una ocasión, he visto corrupciones de memoria oscuras que tardaron días o semanas en rastrear y, finalmente, terminaron con el uso de strstream . ¡Tan pronto como fue reemplazado con stringstream las corrupciones desaparecieron y no hice más preguntas! Eso fue suficiente para mi.