In che modo la distruzione delle variabili locali all'uscita da un blocco viene normalmente chiamata in C++?

StackOverflow https://stackoverflow.com/questions/2605352

  •  25-09-2019
  •  | 
  •  

Domanda

Il C++ chiama automaticamente i distruttori di tutte le variabili locali nel blocco in ordine inverso, indipendentemente dal fatto che il blocco venga chiuso normalmente (il controllo cade) o che venga generata un'eccezione.

Sembra il termine svolgimento della pila vale solo per quest'ultimo.Come viene chiamato il primo processo (la normale uscita del blocco) relativo alla distruzione delle variabili locali?

È stato utile?

Soluzione

Un oggetto viene distrutto automaticamente quando "va fuori portata". Questo potrebbe essere denominato "rigenerazione memorizzazione automatica", ma che in realtà si riferisce alla raccolta dei rifiuti (che sono diverse carte con quella frase nel nome che utilizzano il termine di raccolta rifiuti medio). Quando viene utilizzato per garantire la corretta abbinamento di apertura / chiusura, blocco / sblocco, o altre forme di acquisizione delle risorse con il loro rilascio del caso, allora è conosciuto come il modello di progettazione di acquisizione delle risorse è di inizializzazione (Raii) , che è un po 'ironico, dato che l'aspetto principale di RAII non è l'inizializzazione delle risorse o di acquisizione, ma piuttosto la sua distruzione.

Altri suggerimenti

Stack svolgimento avviene in entrambi i casi, è solo che sotto la normale esecuzione dello stack viene svolto solo al contesto del metodo chiamata (o blocco) quando il metodo ritorna esecuzione (o il blocco viene chiuso). variabili locali sono allocate sullo stack, in modo che siano puliti in ordine inverso di assegnazione, ed è questo processo che viene chiamato svolgimento. Non è diverso rispetto l'elaborazione di qualsiasi altro tipo di dati che ci si memorizzano in una struttura LIFO - per esempio Annulla, Ripeti.

Quando viene generata un'eccezione il conduttore si srotola la pila attraverso attraverso zero o più metodi fino a trovarne uno che può intercettare l'eccezione, o fino a raggiungere la sommità della pila, a quel punto il gestore di eccezioni non gestite vengono chiamati .

Sembra essere convenzione utilizzare solo il termine rimozione dello stack nel caso della gestione delle eccezioni, ma è lo stesso processo che si verifica in ognuno di questi casi. Il caso particolare in cui le svolgitori pila a causa di un metodo eccitante è chiamato ritorno, non sembra essere qualsiasi convenzione per nominare cosa succede quando un blocco di codice scoped si esce.

La variabile locale viene distrutta quando passa nell'ambito. Forse il processo è chiamato come "uscire del campo di applicazione"?

Non sono sicuro che ci sia un nome per questo. variabili di stack sono così automatico che nessuno si preoccupa di loro, mai, non basta nemmeno a dare un nome per questo processo di pulizia automatico.

Chiamatelo "andare fuori portata", immagino.

Ho sempre sentito parlato come "uscire di portata" o più precisamente "una variabile auto uscendo dal suo ambito".

Se quello che stai chiedendo è come la chiamata al metodo viene effettivamente implementata nel codice macchina, direi che dipenderebbe dalla convenzione di chiamata utilizzata

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top