2012-01-06 16 views
5

Pregunta simple solo por curiosidad.¿Qué es más eficiente/ordenado: borrar un stringstream existente o crear uno nuevo?

Múltiples métodos en una clase necesitan usar un stringstream, o específicamente un ostringstream.

1) tener una variable stringstream como un miembro de la clase y luego apenas claro él antes de usarlo es decir msg.str("")

2) Crear una nueva variable stringstream localmente en cada método cada vez que hay que usarla .

¿Cuál es la mejor manera de implementar esto, en términos de eficiencia y pulcritud?

Mi corazonada es la opción 1, pero no estoy seguro si la construcción inicial combinada con cada llamada a str() sería peor?

P.S. He leído y Initializing.. which one is more efficient?Which is quicker/more efficient?, mi siguiente paso sería que me miro en perfiles y escribir una pequeña aplicación de prueba, pero sentí que pide podría ser más rápido :-)

+0

El problema con las preguntas es que las respuestas estarán llenas de religión y folclore y lo más probable es que no se apliquen a su situación. El perfilado debe ser preferido. – PlasmaHH

+0

@PlasmaHH: el perfilado solo muestra el rendimiento ... si se hace bien. Preguntar también puede señalar otros defectos en algunos de los enfoques (relacionados con el aspecto "ordenado", por ejemplo). Dicho esto, solo puedo aceptar que la subjetividad es un riesgo. –

+0

Y el problema con los perfiles es que responde a la pregunta sobre el entorno en el que se está ejecutando (si no lo rellena, los perfiles pueden ser difíciles de hacer bien), y no aprende sobre consistencia, portabilidad o corrección. cuestiones como James señaló .... –

Respuesta

7

No utilice stringstream para empezar. Use istringstream o ostringstream, lo que sea apropiado. Y solo úsalo una vez; borrar es una operación compleja, que requiere varias líneas de código, y es fácil olvidar algo. msg.str("") no comienza a direccionar todo el estado. También debe restablecer los indicadores de formato, el estado de error, la máscara de excepción y cualquier información de formato adicional establecida en las variables adquiridas mediante xalloc.

+0

Genial, gracias por eso –

Cuestiones relacionadas