Dal friendly manual (abbreviando # 2 un po '):
- distruttore della classe si chiama.
- Distruttori per membri non statici in ordine inverso alla dichiarazione.
- I distruttori per classi base non virtuali sono richiamati nell'ordine inverso di dichiarazione.
- I distruttori per le classi di base virtuali vengono richiamati nell'ordine inverso di dichiarazione.
Quindi il compilatore emette codice che distrugge nell'ordine AB, B, A.
[Edit 20.150.725: commenti ripetuti di Barry alla fine mi ha portato a notare che avevo typoed "Questo non è" come "Questo è anche". Naturalmente, dopo averlo digitato, non sono riuscito a vederlo fino a quando non ho effettuato il . Meh. Così, quello ha cambiato parola nel seguito.]
Questo è non l'ordine da isocpp.org di FAQ. Quella voce si riferisce alla stessa domanda sull'ordinazione del costruttore, dove il testo "Si noti che l'ordine B1 e poi B2 (o B1a poi B1b) è determinato dall'ordine in cui le classi di base compaiono nella dichiarazione della classe, non nell'ordine che l'inizializzatore appare nell'elenco di inizializzazione della classe derivata. " appare, evidenziando che l'ordine di dichiarazione è l'ordine pertinente.
fonte
2015-07-20 18:03:44
Sì, la distruzione è nell'ordine inverso rispetto alla dichiarazione. –
Quale compilatore stai facendo che è quello che viene stampato? Dovrebbe AB, A, B. – Barry
Sto usando Visual Studio 2013 – user1235183