C++:在不删除指向的对象的情况下,从对象指针向量中删除元素的正确方法是什么
C++: What is the proper way to remove elements from a vector of object pointers without deleting the object it points to?
在不删除其指向的对象的情况下,从对象指针向量中删除元素的正确方法是什么?
我正在尝试从我的矢量中选择性地删除元素
std::vector<Node*>openNodes;
而不会破坏任何指向的Node对象。(这些节点正在其他地方使用。)
我尝试使用<algorithm>的remove_if函数类似于
std::remove_if(openNodes.begin(),openNodes.end(),CheckClosedNode);
使用我自己的自定义比较器功能
bool CheckClosedNode(Node *tocheck)
{
if(tocheck->isOpen)
return false; //Don't remove. Node is still open.
else
{
//std::cout << "node " << tocheck->id << " is being removed from open list..." << std::endl;
return true; // Remove. Node is closed.
}
}
然而,当我std::cout openNodes的内容时,没有任何内容被删除。我读到应该将std::erase()与remove_if()结合使用,但erase(()将删除节点。我曾想过将所有需要删除的元素移到向量的前面,并执行pop_front(),但事实证明pop_frond也会删除。
有没有一种标准的方法可以在不删除对象的情况下从向量中删除元素?
如果节点是指针,它实际上不会删除节点。当您使用new为对象分配内存时,您的工作是删除指针。现在,如果您像vector<Node>
一样声明它,这将是一个问题,因为擦除必须调用Node上的解构器。然而,指针实际上就像int类型(因为它只是一个内存地址)。当您将其从向量中移除时,它所指向的内存不会发生任何变化。
相关文章:
- 迭代时从向量和内存中删除对象
- C++从对象自己的类中删除对象
- 如何通过对象的类属性删除对象,并返回其对象值?
- 删除对象(具有不同类型)的引用时会发生什么情况?
- 从列表C++中删除对象
- c++ 循环访问对象列表并删除对象
- 从对象本身的容器中删除对象
- 从尝试引用已删除函数的矢量 C++ 中删除对象
- 如何通过指向元组的共享指针删除对象
- 防止通过接口删除对象
- 在 c++ 中从内存中删除对象
- 当对象被删除时,复制被删除对象的对象如何
- 当我使用dynamic_cast并删除对象删除时,析构函数是如何工作的?
- 从内存中删除对象
- 通过C++中的删除方法自行删除对象
- C++ - 析构函数只是释放内存还是实际删除对象
- 如何通过存储在 std::list 中的指针删除对象?
- 如何通过对象参数从指针矢量中删除对象和指针
- 我可以删除对象的右值版本的函数吗?
- 使用对象的索引从矢量中删除对象