在元素自己的析构函数中擦除指向静态向量中元素的指针
erasing a pointer to an element in a static vector, in the element's own destructor
下面的代码来自我用动态内存管理编写的游戏。我有一个名为"all_gadgets"的静态向量,其中包含指向游戏中每个小工具的指针。在运行时删除小工具时,我想从静态向量中删除相应的指针。我试过这个:
Gadget::~Gadget(){
int i = Gadget::all_gadgets.size();
for (std::vector<Gadget *>::iterator it = Gadget::all_gadgets.begin(); it!=all_gadgets.end(); ++it){
if ((*it)==this){
Gadget::all_gadgets.erase(it);
break;
}
}
int j = (i - Gadget::all_gadgets.size());
if(j!=1)
std::cout << j << " ooops! Gadget not deleted!!" << std::endl;
}
在上面的代码中,j 将变为零:(有什么建议吗?
将指针设置为 null 不是一个选项。我正在使用VC10。
为此使用侵入性双链表,它将更有效地进行插入、删除和按顺序迭代。
通常,链表的局部性很差。 但是,对于指针向量,虽然指针本身可能以很大的局部性存储,但内容需要额外的间接级别和局部性的损失。
使用侵入性链表,位置与内容的位置完全相同。 因此,您可以实现局部性的理论上限,加上廉价的插入和移除。
您的实际问题可能是由于没有为每个构造函数执行插入而引起的。 默认情况下,编译器会生成一个复制构造函数(在 C++11 中,移动构造函数),除非您提供自己的构造函数,否则不会更新您的all_gadgets
列表。
相关文章:
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- C++:如何循环通过向量中的整数元素
- 如何在C++向量中奇数元素前面加上值-1,我在使用insert函数时遇到了问题
- 不允许在向量中添加更多元素
- 基于范围的 for 循环:迭代使用一个元素扩展的向量
- 使用并行参数向量调用元素向量的成员函数
- C++ 查找字符串中存在的元素向量
- 包含 std::threads 的元素向量
- 避免从单一元素向量转换为基元类型
- 对自定义元素向量进行排序时出现意外(至少对我来说)行为
- 如何为对元素(向量和int)配对创建unique_ptr也是unique_ptr
- 元素向量乘法 C++(代码不起作用)
- 时间和空间复杂性在二叉树的每个级别创建元素向量(NON-BST)
- 遍历结构元素向量
- 犰狳C++中的元素向量或矩阵乘法
- 为什么'std::vector<int> b{2};'创建 1 元素向量,而不是 2 元素向量?
- 可移动元素向量的大小调整是否有效?
- 唯一元素向量的c++模板函数
- 获取索引和元素-向量问题
- 定义一个生成元素向量的函数时,正确的方法是什么?