2015-10-11 13 views
9

Dato un insieme variabile stringa certo valore:C'è qualche differenza tra i diversi metodi di cancellazione del contenuto di una variabile stringa?

string s = "Hello";

C'è differenza (prestazioni, trucchi) tra i seguenti metodi per cancellare il contenuto ?:

s = ""

s = std::string()

s.clear()

Ho ottenuto il codice di esempio da questa risposta a una domanda sulla cancellazione di una variabile https://stackoverflow.com/a/11617595/1228532

+1

sebbene il codice dietro possa essere diverso per il 3, non vedo alcuna differenza di prestazioni di trucchi particolari tra di loro. –

+1

Dipende se si desidera mantenere la memoria allocata o scartare anche quella. –

+0

I _think_ la regola dovrebbe essere che se una classe fornisce un metodo definito chiaro/troncato/ecc, dovrebbe essere preferito a qualsiasi cosa che coinvolga assegnazioni/provvisori/copiatori o simili. –

risposta

9

Ci sono alcune differenze notevoli.

clear imposta la lunghezza della stringa su 0, ma non cambia la sua capacità.

s="" o s = std::string() crea una stringa completamente nuova (vuota), assegna il suo valore alla stringa esistente e getta via il contenuto della stringa esistente. Soprattutto se stai utilizzando un'implementazione di std::string che non include l'ottimizzazione della stringa corta, questo potrebbe essere molto più lento di clear. Per aggiungere la beffa al danno, significa anche che se aggiungi più dati alla stringa, finirà per riallocare il buffer a partire da un buffer minuscolo che probabilmente dovrà riallocare man mano che la stringa cresce.

Bottom line: clear sarà spesso più veloce, per non parlare di dare una chiara espressione del tuo vero intento.

Problemi correlati