Sì, come dicono tutti gli altri. C++ specifica/incarica questo.
Ma solo per aggiungere che, per completezza: se il vostro goto
utilizza il computed- goto
estensione trovato in alcuni compilatori - gcc, clang, forse altri ma non compreso MSVC scorso ho saputo - se il il distruttore dell'oggetto verrà chiamato è piuttosto confuso. Quando un goto
si sposta su una singola posizione, è molto chiaro che cosa devono essere chiamati i distruttori prima del trasferimento del flusso di controllo. Ma con uno goto
calcolato, potrebbe essere necessario chiamare dinamicamente diversi distruttori per dare la semantica "attesa". Non sono sicuro di cosa facciano i compilatori che implementano questa estensione, in quei casi. La mia memoria dall'incontrare questo è che clang avverte quando un computer calcolato - goto
potrebbe lasciare un ambito con un oggetto con un distruttore non trival, sostenendo che il distruttore non verrà chiamato. In alcuni casi potrebbe andare bene, in altri no. Non so a priori cosa fanno gli altri compilatori. Basta essere consapevoli del problema se si desidera utilizzare i computati goto
s in concerto con oggetti con distruttori non banali.
fonte
2013-04-10 17:14:55
Perché hai bisogno di sapere questo? 'goto' ha senso nel codice generato, ma lì puoi e dovresti comunque evitare oggetti con i distruttori. – MSalters
@MSalters: questo non rende assolutamente necessario, perché dovresti evitare gli oggetti con i distruttori? –
@Viktor: Mi permetta di espandere la seconda parte della frase: _In codice generato_, è possibile e dovrebbe comunque evitare oggetti con i distruttori. L'uso canonico di 'goto' è nel codice FSM generato. Qui i salti si verificano avanti e indietro, senza riguardo per gli stati del codice di stato che si trovano proprio nel mezzo. Gli stati FSM semplicemente non sono lineari, ma il codice C++ deve essere. – MSalters