NotePublic/Software/Development/Library/Cpp_Standard_Library/vector_补充说明.md

976 B
Raw Blame History

vector 补充说明

删除指针成员

vector 经常结合对象指针来使用,例如:

class ClassA{ A(){} }

vector<ClassA*> list;
list.push_back(new ClassA());

此时调用 erase() 方法后不会 delete 掉 ClassA 的对象。正确释放资源的方法如下:

vector<ClassA*>::iterator itr;

for(itr=list.begin(); itr!=list.end();)
{
    delete (*itr);
    list.erase(itr);
}

这里end() 指向最后一个元素的下一个位置;调用 delete (*itr) 释放对象;调用 erase() 后itr 会自动 +1。因此 delete 必须在 erase() 前调用,由于 delete 后,只是析构了对象而没有修改 list 中的成员,因此可以继续调用 list.erase(itr),释放 list 中对应的成员。

如果是有条件的删除,则:

vector<ClassA*>::iterator itr;

for(itr=list.begin(); itr!=list.end();)
{
    if(...)
    {
        delete (*itr);
        list.erase(itr);
    }
    else
        itr++;
}