Sì, c'è una perdita e non dipende dall'implementazione.
Questa nuova espressione non può fornire un puntatore nullo. Alloca la memoria chiamando operator new[]
, che è necessario per "restituire un puntatore non nullo a una memoria adeguatamente allineata, oppure lanciare un'eccezione bad_alloc
" (vedere C++ 11 §18.6.1.1/3 e §18.6.1.2/3) .
Inoltre, i requisiti della funzione di allocazione (§3.7.4.1) richiedono che ogni chiamata a una funzione di allocazione restituisca un puntatore distinto da tutti gli altri puntatori che sono stati allocati ma non ancora deallocati. Pertanto, l'implementazione non può semplicemente avere un singolo puntatore "allocazione vuota" che restituisce sempre.
Questo, ogni nuova espressione di matrice alloca qualcosa, anche se l'estensione è zero. Se non lo deallocate tramite delete[]
, lo hai fatto trapelare.
fonte
2013-07-02 07:31:02
Perché dovresti mai allocare byte '0'? – Kolyunya
@Kolyunya Normalmente nessuno lo farebbe, ma cosa succede se la dimensione è una variabile che può essere zero? –
@JoachimPileborg, potresti per favore chiarire il tuo punto? Non riesco ancora a capirlo. La domanda è abbastanza interessante per me. Se chiamiamo 'malloc (0)' chiameremo 'free' dopo? È allocata alcuna memoria? – Kolyunya