2013-04-11 9 views

risposta

7

Con std::string, che è completamente fine come std::string gestisce la propria memoria.

Con le stringhe in stile c che utilizzano char*, è necessario gestire la propria memoria.

+0

Grazie! Speravo che sarebbe stato così facile. – Tez

+2

Questo è il motivo principale per cui 'stringa' è stata aggiunta alla libreria. – Barmar

1

Utilizzando string ti dà il lusso di gestirlo proprio come gli altri tipi di dati primitivi come intfloat ecc

int a = 3; può essere fatto per a = 5 o a += 3 senza alcun danno

Lo stesso vale per

string myString = "Hello"; 

myString = "Hello World"; 

myString+= " World"; 
+0

Non penso sia corretto. il char senza segno, ad esempio, arriva solo a 255. Più di questo e non funzionerà. Con le stringhe puoi continuare ad aggiungere quanto vuoi (finché il tuo computer non ha memoria). Anche se sto solo supponendo da quando sono nuovo al C++. Aggiungendo 3 a un intero come nel tuo esempio, stai solo modificando il valore memorizzato, non stai aumentando la capacità di un 'int'. – Tez

+0

@Tez Sì, mi dispiace per non averlo chiarito. Non intendevo aumentare la 'dimensione' di' int' di doin '+ = 3'. Volevo indicare che con 'std :: string' puoi cambiare i dati contenuti nella stringa usando' + 'ecc. Con' char * 'etc dobbiamo usare' strcat() '... –

+0

Ah ok. Nessun danno fatto :) – Tez

5

stringa std è proprio come qualsiasi altra classe contenitore come vettore. Hanno anche una struttura di memoria contigua e quando hanno bisogno di spazio aggiuntivo, si limitano a riallocare la memoria da soli.

Se si lavora con frequenti aggiornamenti di stringhe e le stringhe cresceranno nel tempo, è possibile chiamare il metodo string :: reserve() per pre-allocare memoria per le stringhe in modo che i nuovi inserimenti non comporteranno movimenti di memoria di massa

+0

vuoi dire * continuo * memoria invece * contagioso *? – Default

+0

@Default scusa, intendo contiguo –

Problemi correlati