2015-11-20 21 views
5

ho:Elimina puntatore di matrice C++ quando aumenta il puntatore?

int *ptr = new int[8]; 
delete[] ptr; // it ok, all ptr is delete; 

ma se devo:

La mia domanda:

fa delete[] eliminare tutti ptr da ptr[0] a ptr[7] o semplicemente da ptr[1] a ptr[7]? E, se si elimina da ptr[1] a ptr[7], in che modo lo delete[] conosce la dimensione reale da eliminare questa volta?

+2

Non è possibile rilasciare solo una parte di un'assegnazione - tutto o niente sono le uniche opzioni. – molbdnilo

risposta

18

Nessuno dei due; è un comportamento indefinito, che in genere corrisponde a e arresta il programma.

Il puntatore che si passa a delete[] deve essere uno che è stato precedentemente restituito da new[]. Nessuna eccezione*. new[] ha restituito un puntatore al primo elemento dell'array, pertanto è necessario passare un puntatore al primo elemento dell'array su delete[].

* l'unica eccezione è che è possibile passare un puntatore NULL, nel qual caso non farà nulla.