Основные вопросы: указатели на объекты в 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();

Я обнаружил, что через некоторое время указатели в моей таблице напряжения указывают на мусор.