Si consideri il seguente programma:Quando si fa un oggetto sul mucchio andare fuori del campo di applicazione
int main() {
while(...) {
int* foobar = new int;
}
return 0;
}
Quando non foobar
andare fuori portata?
So che quando si utilizza new
, gli attributi sono allocati nello heap e devono essere eliminati manualmente con delete
, nel codice sopra, causa una perdita di memoria. Tuttavia, per quanto riguarda la portata?
Ho pensato che sarebbe andato fuori ambito non appena il ciclo while si interrompe, perché non hai più accesso diretto ad esso. Ad esempio, non è possibile eseguire delete
dopo la fine del ciclo.
Questo è difficile, perché 'foobar' è un puntatore, che correttamente esce dallo scope e viene distrutto (ma l'oggetto a cui punta è _not_ deallocato). Il 'int' è un oggetto sull'heap, non ha scope e dal momento che non hai la chiamata' delete', è trapelato. –