gpt4 book ai didi

c++ - _block_type_is_valid(phead- nblockuse) 从 shared_ptr 的 vector 中删除数据时

转载 作者:行者123 更新时间:2023-11-30 04:05:42 26 4
gpt4 key购买 nike

这是我第一次发帖,所以如果我搞砸了或者让任何事情变得比应该的更难,我深表歉意。

这是我的问题:
我正在尝试从 boost::shared_ptr 节点的 vector 中删除数据,节点是一个类。
在我的代码的一部分中,从称为 openList 的 vector 中删除一个元素效果很好。
在我的代码的另一部分中,从称为 movingObjectsList 的 vector 中删除一个元素,这不起作用。它用 _block_type_is_valid(phead- nblockuse) 提示我。

我试过 clear()popback()erase(),它们都会导致同样的问题。我可以将我喜欢的内容添加到 movingObjectsList 中而不会出现任何错误,并将它保存的数据与其他 vector 交换,但我无法删除任何数据。

我想我已经排除了它是节点析构函数的问题,因为当我使用 Ints 而不是节点时我遇到了同样的问题,而且 openList 能够删除元素。

这是它在 header 中的声明方式。

vector<boost::shared_ptr <node>> movingObjectsList;  

这是cpp中的相关代码

grid::grid()  
{
movingObjectsList = vector<boost::shared_ptr<node>>();
}

void grid::createGrid(){
boost::shared_ptr<node> movingObject = boost::shared_ptr<node> (&nodes[8][8]);
movingObjectsList.push_back(movingObject);
}

void grid::movingObjects()
{
movingObjectsList.erase(movingObjectsList.begin());
}

这是我将其简化为的最简单形式,仅涉及 movingObjectsList。没有删除功能,它工作正常。

最佳答案

作为回答,我重申我在评论中所说的话:当 shared_ptr 的引用计数器达到零时,包含的指针将被删除。这意味着它基本上与 delete &nodes[8][8] 相同。由于它没有分配 new,您将遇到 undefined behavior .

关于c++ - _block_type_is_valid(phead- nblockuse) 从 shared_ptr 的 vector 中删除数据时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23158024/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com