yo lo haría
std::wstringstream temp;
ss.swap(temp);
Editar: se corrigió el error informado por christianparpart y Nemo. Gracias.
PD: El código anterior crea un nuevo objeto stringstream en la pila e intercambia todo ss
con los del nuevo objeto.
Ventajas:
- Garantiza
ss
que ahora estará en un estado nuevo.
- El nuevo objeto se crea en línea y en la pila, para que el compilador pueda optimizar fácilmente el código. Al final, será como restablecer todos
ss
los datos internos al estado inicial.
Más:
En comparación con el operador de asignación: los métodos de intercambio de STL pueden ser más rápidos que el operador de asignación en los casos en que el nuevo objeto tiene un búfer asignado en el montón. En tal caso, el operador de asignación tiene que asignar el búfer para el nuevo objeto, luego PUEDE necesitar asignar otro búfer para el objeto antiguo y luego copiar los datos del búfer del nuevo objeto al búfer nuevo del objeto antiguo. Es muy fácil implementar un intercambio rápido, que simplemente intercambia punteros de los búferes, por ejemplo.
C ++ 11. He visto alguna implementación del operador de asignación de movimiento que es más lento que el intercambio, aunque eso se puede arreglar, pero probablemente el desarrollador de STL no querrá dejar un objeto movido con muchos datos
std::move()
no garantiza que el objeto movido se vacíe. return std::move(m_container);
no borra m_container. Entonces tendrás que hacer
auto to_return (std :: move (m_container)); m_container.clear (); return to_return;
Que no puede ser mejor que
auto to_return;
m_container.swap(to_return);
return to_return;
porque este último garantiza que no copiará búferes.
Por eso siempre prefiero siempre que me swap()
quede bien.