我正在为类项目编写一些代码。其中一项任务是删除指向我们创建的类的指针集合。解决方案如下所示:
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()?
答案 0 :(得分:3)
因为delete
对指针进行操作,而不是对象本身或对象的引用。例如,使用代码
int* a = new int;
您将使用
删除a
delete a;
不
delete *a;
至于为什么mActors.clear();
存在,因为std::list
析构函数会自动执行相同的操作,所以并不是必需的。但是,如果有更多代码被添加到析构函数中,清除列表可确保以后不会意外使用所有这些悬空指针。