Preguntas básicas: punteros a objetos en un_mapa_mapas (C ++)
Soy nuevo en la programación de C ++ y agradecería enormemente las respuestas que no suponen un conocimiento previo.
Gracias a las sugerencias aquí, he creado un mapa desordenado:
typedef std::tr1::unordered_map<std::string, Strain*> hmap;
Los datos en este mapa son punteros a instancias de clase Strain. Tan pronto como se crean estas instancias, creo punteros a ellos, y luego agrego estos punteros a mi tabla hash (hmap strainTable) y a otro vector (vector <Strain *> liveStrains), por ejemplo,
string MRCA;
for ( int b = 0; b < SEQ_LENGTH; b++ ) {
int randBase = rgen.uniform(0,NUM_BASES);
MRCA.push_back( BASES[ randBase ] );
}
Strain * firstStrainPtr;
firstStrainPtr = new Strain( idCtr, MRCA, NUM_STEPS );
liveStrains.push_back( firstStrainPtr );
strainTable[ MRCA ]= firstStrainPtr;
Las instancias de clase Strain nunca se eliminan, ni los punteros a ellas se eliminan de strainTable. Los punteros se mueven ocasionalmente entre el vector <Strain *> liveStrains y el vector <Strain *> dead strrains, pero una vez en la tabla de tensión, permanecen en la tabla de tensión.
¿Esto es kosher? Mientras las instancias subyacentes nunca se destruyan, ¿permanecerán intactos los punteros que se les agregan?
¿También es correcto que siempre pueda obtener los atributos de los miembros de los punteros en la tabla de tablas utilizando, por ejemplo, para la primera entrada,
hmap::const_iterator itr1 = strainTable.begin();
int id = (itr1->second)->getStrainID();
Estoy encontrando que después de un tiempo, los indicadores en mi tabla de puntos apuntan a la basura.