2009-03-06 16 views
33

Sto provando a creare una serie di puntatori. Questi puntatori punteranno su un oggetto Studente che ho creato. Come lo faccio? Quello che ho ora è:Come si crea un array di puntatori?

Student * db = new Student[5]; 

Ma ogni elemento di tale array è l'oggetto studente, non un puntatore all'oggetto studente. Grazie.

risposta

68
Student** db = new Student*[5]; 
// To allocate it statically: 
Student* db[5]; 
+1

Come 'Studente * db [5]' la stessa cosa di 'Studente ** db = nuovo Studente * [5]'? Qual è il vantaggio di usarne uno sull'altro? – damiancesar

+1

Quando si desidera restituire un array da una funzione, è necessario allocare l'array nello heap. Se è allocato nello stack viene distrutto immediatamente l'ambito di tale funzione termina. –

17
#include <vector> 
std::vector <Student *> db(5); 
// in use 
db[2] = & someStudent; 

Il vantaggio di questo è che non devi più preoccuparti di eliminare la memoria allocata - il vettore lo fa per te.

+0

Mentre il vettore è il modo suggerito per avere un elenco di cose, in senso stretto, non è un array. –

+0

Può essere utilizzato in tutti i modi in cui è possibile utilizzare un array. Se cova come un'anatra, è un'anatra. –

+6

Il vettore cancellerà _non_ la memoria allocata automaticamente, libererà la memoria per i _pointers_ ma non per la memoria a cui punta il puntatore. Usa boost :: ptr_vector per questo. –

11

un array di puntatori è scritto come un puntatore di puntatori:

Student **db = new Student*[5]; 

Ora il problema è, che hai solo riservata memoria per i cinque puntatori. Quindi devi scorrere attraverso di loro per creare gli oggetti Studente stessi.

In C++, per la maggior parte dei casi d'uso la vita è più semplice con un vettore std ::.

std::vector<Student*> db; 

Ora è possibile utilizzare push_back() per aggiungere nuovi puntatori e [] per indicizzarlo. È più pulito da usare rispetto alla ** cosa.