Grundlegende Fragen: Zeiger auf Objekte in unordered_maps (C ++)

Ich bin neu in der C ++ Programmierung und würde mich über Antworten sehr freuen, die nicht viel Vorwissen voraussetzen.

Dank der Vorschläge hier habe ich eine ungeordnete Karte erstellt:

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

Die Daten in dieser Map sind Zeiger auf Instanzen der Klasse Strain. Sobald diese Instanzen erstellt sind, erstelle ich Zeiger darauf und füge diese Zeiger dann meiner Hash-Tabelle (hmap strainTable) und einem anderen Vektor (vector <Strain *> liveStrains) hinzu, z.

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;

Instanzen der Klasse Strain werden niemals gelöscht, noch werden Zeiger auf sie aus strainTable entfernt. Zeiger bewegen sich gelegentlich zwischen vector <Strain *> liveStrains und vector <Strain *> deadStrains, aber sobald sie sich auf strainTable befinden, bleiben sie auf strainTable.

Ist das koscher? Bleiben die hinzugefügten Zeiger intakt, solange die zugrunde liegenden Instanzen nicht zerstört werden?

Ist es auch richtig, dass ich immer in der Lage sein sollte, Mitgliedsattribute aus den Zeigern in strainTable abzurufen, indem ich beispielsweise für den ersten Eintrag Folgendes verwende?

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

Nach einer Weile stelle ich fest, dass Zeiger in meiner Stammtabelle auf Müll verweisen.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage