C++ std::未删除的列表项

C++ std::未删除的列表项,c++,stl,std,C++,Stl,Std,我遇到一些列表项未从std::list中删除的问题。由于某种原因,该项保留在列表中,并且列表没有递减。换句话说,列表容器找不到元素 以下是我的清单: std::list<IPressable*> interactables; IPressable是由难处理对象继承的抽象类 我已确保列表中存在指针地址 有人知道为什么会这样吗?我不是C++中最有经验的人,但这是一个有趣的问题! 非常感谢您的帮助 要从需要迭代器引用的列表中删除,您可能需要尝试一下。首先在列表上循环以获取您正在查找的对象

我遇到一些列表项未从std::list中删除的问题。由于某种原因,该项保留在列表中,并且列表没有递减。换句话说,列表容器找不到元素

以下是我的清单:

std::list<IPressable*> interactables;
IPressable是由难处理对象继承的抽象类

我已确保列表中存在指针地址

有人知道为什么会这样吗?我不是C++中最有经验的人,但这是一个有趣的问题!
非常感谢您的帮助

要从需要迭代器引用的列表中删除,您可能需要尝试一下。首先在列表上循环以获取您正在查找的对象的迭代器引用,并将其传递给删除列表,它应该可以工作。更多信息

奥斯瓦尔德是正确的;这个问题在我的代码中的其他地方。问题在于IPressable是一个抽象类,用于多重继承。因此,我无法比较指针甚至值。执行此操作的代码是:

void DestroyRemovalStackedOBJS()
{
    while (!removalStack.empty())
    {
        TreeNode* currentNode = removalStack.top();

        RemoveChildFromOtherObject(currentNode, currentNode->parent);

        RemoveInteractableobject(dynamic_cast<IPressable*>(currentNode));

        removalStack.pop();

        delete currentNode;
    }
}
void DestroyRemovalStackedOBJS()
{
而(!removalStack.empty())
{
TreeNode*currentNode=removalStack.top();
从其他对象(currentNode,currentNode->parent)移除Childf;
RemoveInteractableobject(dynamic_cast(currentNode));
removalStack.pop();
删除当前节点;
}
}
上面的代码从树结构(父层次结构)和列表(用于显式管理所有对象)中删除节点

问题是我没有
动态\u cast
。此类型转换将其转换为正确的类型,因此地址+数据与类型正确对齐(这有点像猜测)


如果有人知道发生了什么事,请告诉我

std::list::remove
的使用是正确的,因此问题可能在代码的其他地方;例如,您可能无意中复制了列表。请提供!什么是指针地址?您是否尝试过调试代码,并在该行前后查看了
对象
可交互对象
的值?@buc两者的值保持不变。指针仍在列表项中的列表中,并且
对象
指针保持不变(地址和值)。
std::list::remove
的使用是正确的。这个问题在代码的其他地方。
void DestroyRemovalStackedOBJS()
{
    while (!removalStack.empty())
    {
        TreeNode* currentNode = removalStack.top();

        RemoveChildFromOtherObject(currentNode, currentNode->parent);

        RemoveInteractableobject(dynamic_cast<IPressable*>(currentNode));

        removalStack.pop();

        delete currentNode;
    }
}