2009-03-06 10 views
33

Estoy tratando de crear una matriz de punteros. Estos punteros apuntarán a un objeto de Estudiante que creé. ¿Cómo lo hago? Lo que tengo ahora es:¿Cómo creo una matriz de punteros?

Student * db = new Student[5]; 

Pero cada elemento en la matriz que es el objeto del estudiante, no un puntero al objeto de estudiantes. Gracias.

Respuesta

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

¿Cómo es 'Student * db [5]' lo mismo que 'Student ** db = new Student * [5]'? ¿Cuál es el beneficio de usar uno sobre el otro? – damiancesar

+1

Cuando desee devolver una matriz desde una función, la matriz debe asignarse en el montón. Si se asigna en la pila, se destruye inmediatamente el alcance de esa función finaliza. –

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

La ventaja de esto es que usted no tiene que preocuparse acerca de cómo eliminar el almacenamiento asignado - el vector lo hace por usted.

+0

Si bien el vector es la forma sugerida para tener una lista de cosas, estrictamente hablando, no es una matriz. –

+0

Se puede usar de cualquier manera que se pueda usar una matriz. Si grazna como un pato, es un pato. –

+6

El vector _no_ eliminará el almacenamiento asignado automáticamente, liberará el almacenamiento para los _positores_ pero no para la memoria a la que apunta el puntero. Use boost :: ptr_vector para eso. –

11

una matriz de punteros se escribe como un puntero de punteros:

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

Ahora el problema es, que sólo se ha reservado memoria para los cinco punteros. Por lo tanto, debe iterar a través de ellos para crear los objetos propios.

En C++, para la mayoría de los casos de uso, la vida es más fácil con std :: vector.

std::vector<Student*> db; 

Ahora puede utilizar push_back() para agregar nuevos punteros a ella y [] para indexarlo. Es más limpio de usar que **.

Cuestiones relacionadas