Vector Iterators Casting

c++, casting, pointers, vector

Solution

while (!myVector.empty())
{
  ((DerivedClass*)(myVector.back()))->Shutdown();
  myVector.pop_back();
}

Notes:

- You should probably use `dynamic_cast` instead of the hard cast. (If it's sure that there are only `DerivedClass` objects in the vector, why isn't it `std::vector<DerivedClass>`?)

- You should probably not have to cast at all, since `Shutdown()` should be declared in the base class.

- You should probably delete the objects, too, before you pop them off the vector. (But that might not be so.)

- You should probably use a smart pointer which calls `Shutdown()` (and `delete`, probably).

Edit: Using `std::vector<T>::clear()`, as shown by markh44 is probably better than the `pop_back()`.

Problem

Hey, In C++, I have a vector of type: ``` vector<BaseClass*> myVector; ``` In which, I insert (push_back) pointers of derived classes into it. Now, I want to pop back its elements so I do this: ``` 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(); } ``` but as mention in the comments before I pop it, I need to call its Shutdown() method and the cast is not working properly too. Any resolutions? or is impossible?

Original source