use*_*497 1 c++ pointers vector void
大家好我试图从vector中删除void指针,程序在删除时崩溃.非常感谢你!
template <class T> class tArray_t : public vpArr_t {
virtual ~tArray_t() {
for (vector<void*>::iterator it = array.begin() ; it != array.end(); )
{
vector<void*>::iterator nextElement = it+1;
delete *it; // here is the crash
it = nextElement;
}
Run Code Online (Sandbox Code Playgroud)
};
删除void指针是未定义的.你得到了你所要求的.
用vector<T*>而不是vector<void*>.如果您vector<void*>继承自基类,则必须T*在删除之前将指针强制转换.
delete static_cast<T*>(*it);
Run Code Online (Sandbox Code Playgroud)
您可能还想节省一些工作和使用boost::ptr_vector.