所以我在这里尝试实现一些内存管理技术。在我的程序中,我创建了一个 stl 列表,以便它包含“Blast”类的对象及其各自的迭代器:
list<Blast> blasts;
list<Blast>::iterator it1;
看了一圈发现,如果你使用erase函数,它会调用类的析构函数,然后删除它指向的对象的迭代器,并返回一些其他的指针(迭代器)。但是,如果类是 POD,那么对析构函数的调用将不会做任何事情,因此保存在该对象中的所有信息都将保存在内存中。
为了解决这个问题,我尝试动态分配对象,以便可以使用 delete 函数将其从内存中擦除:
Blast *blast;
blast = new Blast;
但是,在这里我遇到了一个问题。当我试图将对象推送到列表中时,它只允许我推送指针:
blasts.push_back(*blast);
起初,我什么都没想。所以我继续说:
if(it2->getX() > 600) {
delete &it2;
it2 = blasts.erase(it2);
}
然后我意识到,它的作用是删除指向对象的指针,然后删除指向指向对象的指针的指针。
我不完全确定这是否真的正确,因为我无法知道是否存在内存泄漏。所以我的问题是:
在删除指向该对象的任何指针之前,我必须做什么才能从内存中擦除该对象?我的实现是否正确?结果和我只是简单地将对象推到列表上一样吗?