Pregunta

Hace poco descubrió que std::strstream ha sido desaprobado en favor de std::stringstream. Ha sido un tiempo desde que he utilizado, pero hizo lo que tenía que hacer en el momento, por lo que se sorprendió al escuchar de su desaprobación.

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

¿Fue útil?

Solución

El strstream devuelve un char * que era muy difícil de manejar, ya que en ninguna parte se afirma que la forma en que se había asignado. Era por lo tanto imposible saber si se debe eliminar o llame sin () en él o hacer algo completamente distinto. Acerca de la única manera realmente satisfactoria para cancelar la asignación fue de la mano de nuevo a la strstream través de la función freeze(). Esto fue lo suficientemente no obvio, que mucha gente se equivocaron. El stringstream devuelve un objeto de cadena que gestiona en sí, que es mucho menos propenso a errores.

También estaba el problema de tener que utilizar ends de interrumpir la cadena, pero creo que el problema de cancelación de asignación fue la razón principal de desaprobación.

Otros consejos

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

(Tenga en cuenta que como strstream todavía proporcionan algo que no está disponible en otros lugares, continuará a estar presentes en C ++ 0X - al menos la última vez que revisé el proyecto fue).

A strstream construye una char *. Un std::stringstream construye una std::string. Me suponer strstreams están en desuso becuase a la posibilidad de un desbordamiento de memoria, algo que impide std::string automáticamente.

Desde un punto de vista personal en más de una ocasión me he visto corrupción de memoria oscuros que tardaban días o semanas para localizar y finalmente descendió a uso de strstream. Tan pronto como se sustituyó por stringstream las corrupciones desaparecieron y yo no hacer más preguntas! Eso fue suficiente para mí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top