我不熟悉C++編程,並非常感謝不承擔更多先驗知識的回覆。基本問題:指向unordered_maps中對象的指針(C++)
感謝這裏的建議,我創建了一個無序的地圖:
typedef std::tr1::unordered_map<std::string, Strain*> hmap;
在這個地圖中的數據是指向應變類的實例。一旦創建這些情況下,我創建指向他們,我再添加這些指針到我的哈希表(HMAP strainTable)和另一個向量(矢量<應變*> 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的實例永遠不會被刪除,指針也不會從StressTable中刪除。指針偶爾會在矢量< Strain *> liveStrains和矢量< Strain *> deadStrains之間移動,但是一旦在strainTable上,它們會停留在strainTable上。
這是猶太教嗎?只要基礎實例永遠不會被銷燬,添加到它們的指針會保持不變?
是不是也是正確的,我應該總是能夠通過使用,例如,對於第一個條目獲取成員來自三分球strainTable屬性,
hmap::const_iterator itr1 = strainTable.begin();
int id = (itr1->second)->getStrainID();
我發現了一段時間後,指針在我的張力表中指向垃圾。
除非您調用應變指針上的刪除,它們不會被釋放,但可能存在其他事情,例如在未分配的區域中寫入。爲Strain編寫一個析構函數並編寫一些調試打印語句或拋出異常來查看調用堆棧,如果您懷疑Strain以某種方式被釋放。 – 2009-10-31 01:43:53