Uso estesamente std::stringstream
per costruire stringhe e messaggi di errore nella mia applicazione. Le stringstreams
sono in genere variabili automatiche a vita molto breve.Devo preallocare std :: stringstream?
Tale utilizzo causerà la riallocazione dell'heap per ogni variabile? Devo passare dalla variabile temporanea alla classe stringstream
?
In quest'ultimo caso, come è possibile prenotare il buffer stringstream
? (Devo inizializzarlo con una stringa abbastanza grande o c'è un metodo più elegante?)
Buon consiglio; tuttavia, riservare 50 e quindi copiare quella stringa potrebbe invece vanificare una piccola ottimizzazione del buffer non heap (se l'implementazione ne ha una). Se vuoi scrivere il tuo streambuf, allora hai un controllo preciso su tutta la gestione del buffer; dovresti usare ostream (o istream o iostream, ma la domanda indica che la formattazione dell'output è la preoccupazione qui) con lo streambuf piuttosto che cambiare il buffer di uno stringstream attraverso rdbuf. –
Non penso che lo stringstream riservi qualcosa di più della lunghezza del contenuto di 'str' (che è 0). Secondo cplusplus.com: "Costruisce un oggetto ostringstream con una copia di str come contenuto.". Il riferimento è "copia del contenuto di stringhe". Non dice esplicitamente che riserva la stessa quantità di memoria. Non sono riuscito a trovare alcuna fonte che dica qualcosa sulla prenotazione della memoria usando questo costruttore. – NickSoft
Il costruttore che usi sopra non è più valido. Puoi vedere che il costruttore no-copy è stato rimosso. http://www.cplusplus.com/reference/sstream/stringstream/stringstream/ – user1122069