2009-03-06 8 views
33

Próbuję utworzyć szereg wskaźników. Wskaźniki te wskażą obiekt ucznia, który utworzyłem. Jak mam to zrobić? Co mam teraz jest:Jak utworzyć tablicę wskaźników?

Student * db = new Student[5]; 

Ale każdy element tej tablicy jest przedmiotem student, nie wskaźnik do obiektu studenckiej. Dzięki.

Odpowiedz

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

Jak to jest "Student * db [5]" to samo, co "Student ** db = new Student * [5]"? Jaka jest korzyść z używania jednego na drugim? – damiancesar

+1

Gdy chcesz zwrócić tablicę z funkcji, tablica musi zostać przydzielona na stercie. Jeśli jest on przydzielony na stosie, to jest natychmiast niszczony, zakres tej funkcji się kończy. –

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

Zaletą jest to, że nie trzeba się martwić o usunięcie przydzielonego składowanie - wektor zrobi to za Ciebie.

+0

Podczas gdy wektor jest sugerowanym sposobem na listę rzeczy, ściśle rzecz biorąc, nie jest to tablica. –

+0

Można go używać pod każdym względem, w jaki sposób można wykorzystać tablicę. Jeśli to szarpie jak kaczka, to kaczka. –

+6

Wektor _nie_ automatycznie usunie przydzieloną pamięć, zwolni miejsce dla _pointers_, ale nie dla pamięci wskazanej przez wskaźnik. Użyj boost :: ptr_vector do tego. –

11

tablicę wskaźników opisana jako wskaźnik na wskaźniki:

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

Teraz problemem jest to, że masz tylko pamięć zarezerwowana dla pięciu wskaźników. Musisz więc przez nie iterować, aby samemu stworzyć obiekty Ucznia.

W C++, dla większości przypadków użycia życie jest łatwiejsze dzięki std :: vector.

std::vector<Student*> db; 

Teraz możesz użyć funkcji push_back(), aby dodać nowe wskaźniki i [], aby ją zindeksować. Jest czystszy w użyciu niż rzecz.