如何删除集合中的对象

nod*_*nja 10 c++ memory pointers object delete-operator

在我的C++程序中,我使用new在一个函数中创建对象.这些对象被插入到一个集合中.当我想从集合中删除对象时,我在for循环中使用了一个迭代器.当我从集合中删除对象时,我仍然需要删除该对象以释放其内存,对吗?我尝试使用删除,但后来我得到一个错误,说没有分配被释放的指针.那么怎么做呢?

这是我创建对象然后将其插入集合的代码

set <myObject> myobjectlist;
myObject *myobject = new myObject;
myobjectlist.insert(*myobject);
Run Code Online (Sandbox Code Playgroud)

在另一个函数中,我尝试从集合中删除一个对象,并释放它的内存:

    for (set<myObject>::iterator i = myobjectlist.begin(); i != myobjectlist.end(); i++)
if (i->myObjectID == myObjectID)
{
    myobjectlist.erase(*i);
    delete &i;
    break;
}
Run Code Online (Sandbox Code Playgroud)

这没有"删除"部分工作正常.我添加它是因为我认为来自对象的内存没有被释放.

Ben*_*ott 10

假设您正在调用set的erase()方法,请注意这将为您调用对象的析构函数.在您erase()的对象之后,它已经是deleted,因此第二次尝试手动调用delete将失败,因为不再分配指针.

供参考,请参阅此内容