矢量迭代器铸造

aki*_*kif 5 c++ pointers casting vector

嘿,在C++中,我有一个类型的向量:

vector<BaseClass*> myVector;
Run Code Online (Sandbox Code Playgroud)

其中,我将派生类的(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();
}
Run Code Online (Sandbox Code Playgroud)

但正如我在弹出之前的评论中所提到的,我需要调用它的Shutdown()方法并且演员也不能正常工作.任何决议?还是不可能?

sbi*_*sbi 13

while (!myVector.empty())
{
  ((DerivedClass*)(myVector.back()))->Shutdown();
  myVector.pop_back();
}
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 你应该使用dynamic_cast而不是硬铸造.(如果确定DerivedClass向量中只有对象,为什么不呢std::vector<DerivedClass>?)
  • 您可能根本不需要进行转换,因为Shutdown()应该在基类中声明.
  • 在将它们从向量中弹出之前,您应该删除这些对象.(但可能不是这样.)
  • 你可能应该使用一个调用Shutdown()(delete可能)的智能指针.

编辑:使用std::vector<T>::clear(),如markh44所示可能比pop_back().