Ho una base C++ domanda un po ', si consideri una funzione che prende alcuni parametri di input e crea un std::string
che da quei parametri come quella qui sotto:C++ ritorno oggetti temporanei confusione
std::string constructString(int some_parameter) {
std::stringstream ss;
// Construct a string (arbitrarily complex)
ss << "Some parameter is " << some_parameter << " right now";
return ss.str(); //Am I not returning a temporary object here?
}
Capisco che il stringstream-object uscirà dall'ambito quando la funzione ritorna, ma ciò non invalida anche la stringa costruita?
Cosa accadrebbe se cambiassi il tipo di ritorno su const char *
e restituissi invece ss.str().c_str()
?
Il codice come sopra sembra funzionare, ma ho il sospetto che sia solo perché la memoria contenente l'oggetto "temporaneo" non è stata ancora sovrascritta con qualcos'altro quando la uso?
Devo ammettere, sono piuttosto confuso in tali situazioni in generale, sarei grato se qualcuno potesse spiegare tutto questo "oggetti temporanei", tutto per me (o semplicemente indicarmi la giusta direzione).
thx in anticipo
Sarà chiamato distruttore dopo che questa copia non verrà rilevata dalla funzione chiamata constructString? Dato che si tratta di un oggetto temporaneo, suppongo che il puntatore sia tenuto in pila come valore di ritorno. Cosa succede dopo che è stato restituito? Viene distrutto se non c'è un nuovo proprietario dell'oggetto? Come il compilatore sa che l'oggetto deve essere distrutto o no dopo che è stato restituito? –