在标准列表中删除指针对象

乔丹·贝尔

我有一个std::listEntity对象(屏幕上的对象)。在一个类中EntityContainer,我有一个指向不同实体的指针列表。当aEntityContainer被破坏时,我也希望该列表中的所有实体也被破坏。如何做到这一点,同时还避免了导致删除列表成员的迭代器错误?

EntityContainer::~EntityContainer()
{
    // Destroy children
    int numChildren = children.size();
    for (int i = 0; i < numChildren; i++)
    {
        Entity*& child = children.back();
        delete child;
    }
}

上面的内容在std :: list :: clear()中导致了空指针访问冲突,该冲突是在销毁时调用的EntityContainer,因为它是该对象的成员变量。我相信这是因为我已经删除了其列表中的对象,因此,当删除它们时,它当然会尝试访问它们。但是,我的问题是,如果仅保留它,并允许列表clear()而不显式删除其中的对象,则永远不会调用它们的析构函数。我只能假设这是因为列表仅破坏列表中的指针,而不破坏指针指向的对象。不过,这主要是作为假设-我可能是错的。你会怎么办?

普雷托里亚人

假设children定义为

std::list<Entity *> children;

您可以delete使用以下元素:

for(auto&& child : children) {
  delete child;
}
children.clear(); // not really needed since this code is in the destructor

使迭代器失效没有问题,因为您实际上并没有从中删除任何元素list,而只是破坏了列表元素指向的对象。list会还含有相同数量的元素后for声明中完成,只有他们会在该点处无效的内存被人指指点点。


但实际上,不要使用原始指针的容器定义children

std::list<std::unique_ptr<Entity>> children;

然后您可以摆脱析构函数的定义。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从stl列表中删除对象指针

来自分类Dev

QT中数组指针对象的指针

来自分类Dev

在Vala中访问指针对象属性

来自分类Dev

Opencv Ptr类。调用函数后删除指针对象

来自分类Dev

从指针列表中删除指针C ++

来自分类Dev

删除指针向量中的指针指向的对象

来自分类Dev

从指针数组中删除对象

来自分类Dev

从列表中删除对象

来自分类Dev

从列表中删除对象

来自分类Dev

比较和删除具有标准列表的对象列表

来自分类Dev

C ++指针对象位置

来自分类Dev

C ++指针对象位置

来自分类Dev

使用C中的指针删除列表

来自分类Dev

从向量/列表中搜索和删除指针

来自分类Dev

如何删除向量中存储的对象的指针?

来自分类Dev

获取列表中对象的永久指针

来自分类Dev

使用指针的C ++中的对象的经典列表

来自分类Dev

从C ++列表中删除对象

来自分类Dev

从列表C ++中删除对象

来自分类Dev

如何使对象从列表中删除。

来自分类Dev

同时从列表中删除对象

来自分类Dev

如何从指向指针数组的指针中删除对象?

来自分类Dev

从数组中删除与针对属性的测试匹配的对象

来自分类Dev

如何删除包含指向结构的指针的列表的对象?

来自分类Dev

使用针对Reactjs的地图更改位置中的对象列表

来自分类Dev

如何从列表内的列表中删除对象?

来自分类Dev

从JSON对象列表中删除对象

来自分类Dev

从 JSON 对象列表中删除对象类型

来自分类Dev

如何从对象列表中删除几个对象