2013-04-11 12 views
10

Quando exit (0) viene utilizzato per uscire dal programma, i distruttori per gli oggetti non statici con scope locale non vengono chiamati. Ma i distruttori sono chiamati se viene usato il ritorno 0. Si noti che gli oggetti statici saranno svuotati anche se chiamiamo exit().exit (0) vs return 0

Ci dovrebbe essere qualche motivo dietro questa logica. voglio solo sapere di cosa si tratta? Grazie.

+0

Questa non è affatto la stessa domanda di quella citata sopra. Apparentemente ha familiarità con le risposte alla domanda citata ("exit" non chiama distruttori locali, ma sta chiedendo perché: –

+0

@JamesKanze Ok. Abbiamo votato un po 'troppo in fretta su questo, votando per riaprire la domanda, rimosso downvote. – Jean

+0

Anche se la risposta accettata nella domanda collegata a un suggerimento ("exit() non restituisce") alla ragione, sono d'accordo sul fatto che non è certamente un duplicato. È una domanda completamente diversa. – Damon

risposta

8

Nel caso di exit(0), si sta chiamando una funzione. È non aspettarsi che i distruttori delle variabili locali vengano chiamati se si sta chiamando una funzione. E il compilatore non sa, a priori, , che c'è qualcosa di speciale su exit(0).

In realtà, questa logica si applica solo al C++ prima delle eccezioni . Lo standard potrebbe ridefinire exit() per generare un'eccezione definita dall'implementazione con l'argomento e specificareche la chiamata a main sia racchiusa in un blocco try che cattura questa eccezione e restituisce il codice di ritorno al sistema. Ciò significherebbe che exit hanno una semantica completamente diversa in C e in C++, tuttavia; in ogni caso, non è stata presentata alcuna proposta allo prima che la commissione effettui questo cambiamento.