Основные вопросы: указатели на объекты в unordered_maps (C ++)
Я новичок в программировании на C ++ и буду очень признателен за ответы, в которых не требуется много предварительных знаний.
Благодаря предложениям здесь, я создал неупорядоченную карту:
typedef std::tr1::unordered_map<std::string, Strain*> hmap;
Данные на этой карте являются указателями на экземпляры класса Strain. Как только эти экземпляры созданы, я создаю для них указатели, а затем добавляю эти указатели в мою хэш-таблицу (hmap StraightTable) и в другой вектор (vector <Strain *> liveStrains), например,
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;
Экземпляры класса Strain никогда не удаляются, равно как и указатели на них не удаляются из straTable. Указатели время от времени перемещаются между вектором <Strain *> liveStrains и вектором <Strain *> deadStrains, но однажды в файле straTable они остаются в файле штамма.
Это кошерный? Пока базовые экземпляры никогда не уничтожаются, будут ли добавленные к ним указатели оставаться неизменными?
Также верно, что я всегда смогу получить атрибуты-члены из указателей в straTable, используя, например, для первой записи:
hmap::const_iterator itr1 = strainTable.begin();
int id = (itr1->second)->getStrainID();
Я обнаружил, что через некоторое время указатели в моей таблице напряжения указывают на мусор.