Perguntas básicas: ponteiros para objetos em unordered_maps (C ++)

Sou novo em programação C ++ e apreciaria muito as respostas que não pressupõem muito conhecimento prévio.

Graças a sugestões aqui, criei um mapa não ordenado:

typedef std::tr1::unordered_map<std::string, Strain*> hmap;

Os dados neste mapa são ponteiros para instâncias da classe Strain. Assim que essas instâncias são criadas, eu crio ponteiros para elas, e então adiciono esses ponteiros à minha tabela de hash (hmap strainTable) e a outro vetor (vetor <Strain *> liveStrains), por exemplo,

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;

As instâncias da classe Strain nunca são excluídas, nem os ponteiros são removidos do strainTable. Os ponteiros se movem ocasionalmente entre o vetor <Strain *> liveStrains e o vetor <Strain *> deadStrains, mas uma vez no strainTable, eles permanecem no strainTable.

Isso é kosher? Contanto que as instâncias subjacentes nunca sejam destruídas, os ponteiros adicionados a elas permanecerão intactos?

É também correto que eu sempre seja capaz de obter atributos de membro dos ponteiros em strainTable usando, por exemplo, para a primeira entrada,

 hmap::const_iterator itr1 = strainTable.begin();
 int id = (itr1->second)->getStrainID();

Eu estou achando que depois de um tempo, ponteiros na minha tabela apontam para o lixo.

questionAnswers(2)

yourAnswerToTheQuestion