使用迭代器删除对象

时间:2013-10-24 01:54:17

标签: c++

我正在为类项目编写一些代码。其中一项任务是删除指向我们创建的类的指针集合。解决方案如下所示:

CDocument::~CDocument()
{
    for(std::list<CActor*>::iterator it = mActors.begin(); it != mActors.end(); it++)
    {
        delete *it;
    }

    mActors.clear();

}

我的解决方案看起来像这样:

CDocument::~CDocument()
{
    for(std::list<CActor*>::iterator it = mActors.begin(); it != mActors.end(); it++)
    {
        delete **it;
    }
}

我的困惑源于取消引用迭代器。我想从列表中删除CActor对象。在这种情况下,迭代器为我提供了指向指针的指针。为什么我要删除CA指针,*它,而不是内存中的实际对象,**它?另外,为什么附加的mActors.clear()?

1 个答案:

答案 0 :(得分:3)

因为delete对指针进行操作,而不是对象本身或对象的引用。例如,使用代码

int* a = new int;

您将使用

删除a
delete a;

delete *a;

至于为什么mActors.clear();存在,因为std::list析构函数会自动执行相同的操作,所以并不是必需的。但是,如果有更多代码被添加到析构函数中,清除列表可确保以后不会意外使用所有这些悬空指针。