È un comportamento garantito. L'esecuzione effettiva viene srotolato come segue:
0: enter block (scope)
1: Foo::Foo()
2. evaluation of bar(); as expression in return statement
3. save result of the expression as value returned from function
4. finalize return statement to leave function to its caller (request exit from current scope)
5: exit block (scope) with call to Foo::~Foo()
Ecco alcuni riferimenti dalla norma:
- quale programma garanzie di esecuzione, in genere
1,9 L'esecuzione del programma
10 Un'istanza di ciascun oggetto con durata di archiviazione automatica (3.7.2) è associato a ciascuna voce nel blocco .
- Il
foo
è di durata di stoccaggio automatico e:
3.7.2 memorizzazione automatica durata
1 oggetti locali dichiarate esplicitamente auto o la registrazione o non esplicitamente dichiarati statico o extern hanno durata di archiviazione automatica. L'archiviazione per dura fino a quando non viene chiuso il blocco in cui sono stati creati.
- Qual è l'effetto reale del return
6.6.3 L'istruzione return
2 (...) il valore dell'espressione viene restituito al chiamante di la funzione
e
6.6 istruzioni di salto (ritorno appartiene a saltare dichiarazioni)
2 All'uscita da una portata (comunque realizzato), distruttori (12.4) sono chiamati per tutti oggetti costruiti con durata memorizzazione automatica (3.7.2)
- Cosa garantisce che si verifica l'effetto
6.7 Dichiarazione dichiarazione
2 variabili con durata memorizzazione automatica dichiarato nel blocco vengono distrutte all'uscita dal blocco
e
12.4 distruttori vengono invocati
10 distruttori implicitamente (1) per un oggetto costruito con durata di memorizzazione statica (3.7.1) in Terminazione di programma (3.6.3), (2) per un oggetto costruito con durata memorizzazione automatica (3.7.2) quando il blocco in cui l'oggetto viene creato uscite (6,7)
Non è facile da afferrare i dettagli di una singola idea sparsi per tutto lo standard C++. Si spera che una rapida panoramica ti aiuti a fare anche tu questa analisi.
Che cosa ha da dire il tuo libro di testo C++ sull'argomento? –
Di che libro parla questo? È come lo stack overflow, ma modificato e messo su carta? – anon