La regola generale, solo gli oggetti allocati nel negozio gratuito possono causare perdite di memoria. Ma gli oggetti creati nello stack no.Si considera perdita di memoria?
Ecco il mio dubbio,
int main()
{
myclass x;
...
throw;
...
}
Se tiro non viene gestita, si chiama, terminate(), che a sua volta chiama abort() e si blocca l'applicazione. A questo punto, gli oggetti nello stack non sono vuoti (il distruttore non è invocato).
La mia comprensione è "Quando l'applicazione termina (sia in caso di interruzione che di uscita normale), libera tutta la memoria allocata per l'applicazione". Quindi questo non può essere considerato come perdita di memoria.
Sono corretto?
Dovremmo assumere un'applicazione a thread singolo? –
Otteniamo qualcosa di chiaro, 'throw;' nel tuo codice equivale a 'terminate()', perché stai cercando di rilanciare un'eccezione per la quale non c'è nessuno da rilanciare. È definito dall'implementazione indipendentemente dal fatto che si srotoli lo stack. Se lanci * qualcosa *, tutte le variabili automatiche devono avere chiamato i loro distruttori. Questa è l'idea alla base di SBRM (RAII). – GManNickG
jdv, sì è un'applicazione a thread singolo. – user373215