Quindi, sto cercando di capire meglio come funzionano i letterali di stringa in C++. Sono principalmente interessato alle situazioni in cui si assegna l'indirizzo di una stringa letterale a un puntatore e lo si passa in giro. Ad esempio:Quanto sono sicuri e affidabili i letterali di stringa C++?
char* advice = "Don't stick your hands in the toaster.";
Ora diciamo che passo semplicemente questa stringa copiando i puntatori per la durata del programma. Certo, probabilmente non è una buona idea, ma sono curioso di sapere cosa succederebbe dietro le quinte.
Per un altro esempio, diciamo che facciamo una funzione che restituisce una stringa letterale:
char* foo()
{
// function does does stuff
return "Yikes!"; // somebody's feeble attempt at an error message
}
Ora lascia dire questa funzione viene chiamata molto spesso, e la stringa letterale viene utilizzato solo circa la metà del tempo si chiama :
// situation #1: it's just randomly called without heed to the return value
foo();
// situation #2: the returned string is kept and used for who knows how long
char* retVal = foo();
Nella prima situazione, cosa sta effettivamente accadendo? La stringa è appena stata creata ma non è stata utilizzata e non è mai stata rilasciata?
Nella seconda situazione, la stringa verrà mantenuta finché l'utente ne avrà bisogno? Cosa succede quando non è più necessario ... verrà liberato quel ricordo (supponendo che nulla punti più a quello spazio)?
Non fraintendetemi, non ho intenzione di utilizzare stringhe letterali come questa. Sto pensando di usare un container per tenere sotto controllo le mie stringhe (probabilmente std :: string). In genere voglio solo sapere se queste situazioni potrebbero causare problemi di gestione della memoria o di dati danneggiati.
I letterali di stringa C++ sono perfettamente sicuri e affidabili. Sono i programmatori che usano le stringhe letterali che non sono sicure e affidabili. –
Questo è quello che stavo pensando; Ho solo bisogno di rassicurazione, credo. Grazie. :) –