【发布时间】:2009-10-31 00:06:15
【问题描述】:
我是 C++ 编程的新手,非常感谢那些不需要太多先验知识的回复。
感谢这里的建议,我创建了一个无序地图:
typedef std::tr1::unordered_map<std::string, Strain*> hmap;
此映射中的数据是指向 Strain 类实例的指针。一旦创建了这些实例,我就创建指向它们的指针,然后将这些指针添加到我的哈希表 (hmap strainTable) 和另一个向量 (vector 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 类的实例永远不会被删除,指向它们的指针也不会从 strainTable 中删除。指针偶尔会在vector liveStrains 和vector deadStrains 之间移动,但是一旦在strainTable 上,它们就会一直在strainTable 上。
这是犹太洁食吗?只要底层实例永远不会被销毁,添加到它们的指针会保持不变吗?
我应该总是能够通过使用,例如,对于第一个条目,从 strainTable 中的指针获取成员属性,这也是正确的吗,
hmap::const_iterator itr1 = strainTable.begin();
int id = (itr1->second)->getStrainID();
我发现一段时间后,我的 strainTable 中的指针指向垃圾。
【问题讨论】:
-
除非您对应变指针调用 delete,否则它们不会被释放,但可能还有其他事情,例如在未分配的区域中写入。为 Strain 编写析构函数并编写一些调试打印语句或抛出异常以查看调用堆栈,如果您怀疑 Strain 以某种方式被释放。
标签: c++ unordered-map