2013-05-14 23 views
6

Così ho un vettore di puntatori in questo modo:Come deallocare un elemento in un vettore di puntatori?

vector<Example*> ve; 

riempio questo vettore con i puntatori come questo

Example* e = new Example(); 
ve.push_back(e) 

Ma quando voglio rimuoverli, come faccio assicuro ottengono deallocate? È abbastanza?

ve.erase(ve.begin() + 1) 
delete ve[1] 
+2

Una cosa da prendere in considerazione: avete bisogno di puntatori a tutti? Lo fai se gli oggetti sono di tipi diversi (polimorfici); o se sono impossibili o proibitivamente costosi da spostare; o se il vettore non li "possiede" (cosa che fa qui, dal momento che si desidera deallocarli alla rimozione). Altrimenti, considera 'vector '. –

risposta

8

quello che dovete fare è il contrario, ovviamente:

delete ve[1]; 
ve.erase(ve.begin() + 1); 

Tuttavia, è molto più preferibile usare puntatori intelligenti (come std::unique_ptr) invece di puntatori prime quando esprime proprietà.

1

Bisogna eliminare i puntatori prima cancellare il vettore:

for (vector<Example *>::iterator it = vec.begin(); it != vec.end(); it++) { 
    delete *it; 
} 

vec.clear(); 
+0

Usa 'vec.clear()' invece di 'vec.erase (vec.begin(), vec.end())'. –

+0

@MikeDeSimone Abbastanza giusto, fisso. –

Problemi correlati