【发布时间】:2009-09-03 09:03:07
【问题描述】:
嘿,在 C++ 中,我有一个向量类型:
vector<BaseClass*> myVector;
我在其中插入(push_back)派生类的指针。
现在,我想弹回它的元素,所以我这样做:
vector<ADlgcDev*>::iterator iter;
for (iter = myVector.rbegin(); iter != myVector.rend(); iter++)
{
// but before I pop it, I need to shutdown it down
// so I cast this
// but this way, I'm unable to call the function
(DerivedClass*(*iter))->Shutdown();
myVector.pop_back();
}
但正如我在弹出之前在 cmets 中提到的那样,我需要调用它的 Shutdown() 方法并且演员表也无法正常工作。有什么决议吗?还是不可能?
【问题讨论】:
-
顺便说一句,你的循环坏了——要么保持
for循环不变并删除myVector.pop_back(),要么将其保留并更改为检查back()元素的while循环sbi 建议的时间。 -
如果您在脑海中通过包含 10 个项目的数组来完成这些步骤,您会发现您只处理了第一个 5,因为到那时您已经使用
pop_back()删除了最后 5 个。 -
更糟糕的是:使用了 rbegin() 和 end(),因此行为将是未定义的
-
关于 rbegin() 和 end():这不会编译,因为 rbegin() 是一个 reverse_iterator
-
这只是一个错字,已更正!
标签: c++ vector pointers casting