2012-01-06 18 views
5

Semplice domanda solo per curiosità.Qual è il più efficiente/ordinato: cancellare uno stringstream esistente o crearne uno nuovo?

Più metodi su una classe devono utilizzare un stringstream o in particolare un ostringstream.

1) avere una variabile stringstream come un membro della classe e poi basta cancellarlo prima di usarlo cioè msg.str("")

2) Creare una nuova variabile stringstream localmente in ogni metodo ogni volta che è necessario usarlo .

Qual è il modo migliore di implementarlo in termini di efficienza e pulizia?

La mia impressione è l'opzione 1, ma non sono sicuro che la costruzione iniziale combinata con ogni chiamata a str() sarebbe peggiore?

P.S. Ho letto e Initializing.. which one is more efficient?Which is quicker/more efficient?, il mio prossimo passo sarebbe per me di guardare in profilazione e la scrittura di un piccolo test app, ma mi sono sentito chiedere potrebbe essere più veloce :-)

+0

Il problema con la richiesta è che le risposte saranno piene di religione e folklore e molto probabilmente non si applicheranno alla vostra situazione. La profilazione dovrebbe essere preferita. – PlasmaHH

+0

@PlasmaHH: la creazione di profili mostra solo le prestazioni ... se eseguite correttamente. La richiesta potrebbe anche indicare altri difetti in alcuni degli approcci (relativi all'aspetto "pulito", ad esempio). Detto questo, posso solo convenire che la soggettività è un rischio. –

+0

E il problema con il profiling è che risponde alla domanda per l'ambiente in cui stai correndo (se non lo riempi - la profilazione può essere difficile da fare bene), e non si impara sulla coerenza, portabilità o correttezza problemi come James ha sottolineato ... –

risposta

7

Non utilizzare stringstream per cominciare. Utilizzare istringstream o ostringstream, che è sempre appropriato. E usalo solo una volta; cancellando è un'operazione complessa, che richiede diverse linee di codice, ed è facile dimenticare qualcosa. msg.str("") non inizia a indirizzo tutto lo stato. È inoltre necessario ripristinare i flag di formattazione, , lo stato di errore, la maschera di eccezione e qualsiasi altra formattazione aggiuntiva set di informazioni nelle variabili acquisite tramite xalloc.

+0

Grande, grazie per quello –

Problemi correlati