2009-03-06 11 views
33

J'essaie de créer un tableau de pointeurs. Ces pointeurs pointent vers un objet étudiant que j'ai créé. Comment fait-on ça? Ce que j'ai maintenant:Comment créer un tableau de pointeurs?

Student * db = new Student[5]; 

Mais chaque élément de ce tableau est l'objet étudiant, pas un pointeur vers l'objet étudiant. Merci.

Répondre

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

Comment 'Student * db [5]' est-il la même chose que 'Student ** db = new Student * [5]'? Quel est l'avantage d'utiliser l'un sur l'autre? – damiancesar

+1

Lorsque vous souhaitez renvoyer un tableau d'une fonction, le tableau doit être alloué sur le tas. Si elle est allouée sur la pile, elle est immédiatement détruite. –

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

L'avantage de ceci est que vous n'avez pas à vous soucier de supprimer le stockage alloué - le vecteur fait pour vous.

+0

Alors que le vecteur est la manière suggérée d'avoir une liste de choses, à proprement parler, ce n'est pas un tableau. –

+0

Il peut être utilisé de toutes les manières qu'un tableau peut être utilisé. Si ça chavire comme un canard, c'est un canard. –

+6

Le vecteur ne supprimera pas automatiquement le stockage alloué, il libérera le stockage pour les _pointers_ mais pas pour la mémoire vers laquelle pointe le pointeur. Utilisez boost :: ptr_vector pour cela. –

11

Un tableau de pointeurs est écrit comme un pointeur de pointeurs:

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

Maintenant, le problème est que vous ne disposez d'une mémoire réservée aux cinq pointeurs. Vous devez donc les parcourir pour créer les objets Etudiants eux-mêmes.

En C++, pour la plupart des cas d'utilisation, la vie est plus facile avec un vecteur std ::.

std::vector<Student*> db; 

Maintenant, vous pouvez utiliser push_back() pour ajouter de nouveaux pointeurs vers et [] pour indexer. Il est plus propre à utiliser que la ** chose.

Questions connexes