Capisco che, quando scriviamo delete []
su un puntatore creato da un corrispondente new []
, il programma cercherà le informazioni contabili sull'array e scoprirà la dimensione dell'elemento dell'array (un contatore). Quindi il programma invoca il distruttore dell'elemento su ognuno di essi. Finalmente la memoria (che memoria ??) è deallocata da una funzione denominata operator delete
.Cancella [] deallocare la memoria in un colpo dopo aver richiamato i distruttori?
Quello che chiedo è se delete[]
sarà deallocare la intera memoria, assegnato dal new[]
espressione, in un solo colpo perché tali informazioni (quantità totale di memoria) è disponibile dopo tutti gli elementi vengono distrutti, o sarà in successione deallocare la memoria occupata dagli elementi della matrice su cui ha richiamato i distruttori su?
Un correlata quesion follow-up è chiesto Does delete (non array form) know the total amount of memory allocated by either new or new[]
Avrei pensato che la risposta alla tua domanda dipendesse dall'implementazione dal compilatore e dal sistema operativo –
"libero" ha bisogno di conoscere la dimensione dell'allocazione restituita da 'malloc'? –
Lo standard C++ dice qualcosa sul presunto comportamento delle espressioni 'delete'? – Rich