下面的代码来自我用动态内存管理写的游戏。我有一个名为'all_gadgets'的静态向量,其中包含指向游戏中每个小工具的指针。 在运行时删除小工具时,我想从静态矢量中删除相应的指针。我已经试过这样:在元素自己的析构函数中清除静态向量中元素的指针
Gadget::~Gadget(){
int i = Gadget::all_gadgets.size();
for (std::vector<Gadget *>::iterator it = Gadget::all_gadgets.begin(); it!=all_gadgets.end(); ++it){
if ((*it)==this){
Gadget::all_gadgets.erase(it);
break;
}
}
int j = (i - Gadget::all_gadgets.size());
if(j!=1)
std::cout << j << " ooops! Gadget not deleted!!" << std::endl;
}
在上面的代码,J会变成零:(任何建议,为什么
设置指针为null是不是一种选择 我使用? VC10。
实际调用了'erase'吗? – 2012-04-18 14:07:34
如何把cout放在if里面?这样你可以确认它是否真的到达里面。另外,你确定这个小工具是否在all_gadgets列表中?你有没有尝试打印all_gadgets.size()? – Agentlien 2012-04-18 14:14:59
多个线程可以访问'vector'吗? 'j'的价值是什么? – hmjd 2012-04-18 14:16:15