【发布时间】:2014-08-03 10:14:26
【问题描述】:
我有一个 std::list 的 Entity 对象(屏幕上的对象)。在一个类EntityContainer 中,我有一个指向不同实体的指针列表。当 EntityContainer 被破坏时,我希望该列表中的所有实体也被破坏。我该如何做到这一点,同时避免导致删除列表成员的迭代器错误?
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 *>? -
没错 nneonneo。
-
您的访问违规不是由于列表被破坏。