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.