指向std::vector元素的指针
Pointer to element of std::vector
比如
struct functor
{
functor(){}
virtual int operator()()=0;
};
struct impl : public functor
{
int i;
impl(int ii) : i(ii) {}
virtual int operator()(){return i;};
};
void call(functor& f) {std::cout << f() << std::endl;}
class holder
{
public:
holder(){}
std::vector<functor*> dps;
};
class veer
{
public:
std::vector<holder> hs;
std::vector<impl> ds;
veer(){}
void add_h(int i)
{
ds.push_back(impl(i));
holder th;
th.dps.push_back(&ds.back()); //here
hs.push_back(th);
}
};
int main()
{
veer v;
v.add_h(10);
v.add_h(9);
for (auto ih: v.hs)
for (auto ifn : ih.dps)
call(*ifn);
return 0;
}
此段错误。我很抱歉我不能让它更简单,这是最简单的,最接近我的实际代码。我需要指向函数对象的指针向量。我的猜测是,行标记//here
我发送一个无效的指针,但除此之外,我仍然试图弄清楚这一点。
问题是vector
不能保证保持相同的存储空间:
如果new size()大于capacity(),则所有迭代器和引用(包括过端迭代器)无效。否则,只有过末端迭代器失效。
每次调用add_h
时,您可能会使存储在std::vector<functor*>
中的所有指针无效。我想不出一个用例,有一个向量的东西和一个向量的指针,以相同的顺序。你确定这是你需要的吗?
std::vector
倾向于按其所需的空间顺序使用某些东西,因此有时它需要扩展其存储空间。在底层,它必须创建一个新的数组,复制现有的元素,并删除旧的元素。当它这样做时,所有旧的指针现在都指向delete
ed内存。
相关文章:
- 调整大小后指向元素值的指针unordered_map有效?
- 当该数组的索引中没有元素时,指针指向什么?
- 如何在基类指针向量的元素上应用重载的多态函数
- C++:添加新结构时,结构指针向量中的所有元素都会更新
- C++默认情况下,指针类型数组的元素是否保证初始化为 nullptr?
- 删除指针数组 (C++) 中的元素
- 从指向结构数组的指针中提取元素
- 指向数组基址的指针而不是指向第一个元素的指针有什么优点?
- 获取指向指针的指针元素 (c++)
- 经过最后一个数组元素末尾的指针是否应该等于超过整个数组末尾的指针?
- 存储指向动态数组元素的指针
- 通过作为指向 C++ 函数的指针传递来访问 std::array 元素的正确方法是什么?
- 取消引用C++中的指针元素
- 指针数组.获取指针元素的值
- C++访问带有迭代器的向量的指针元素
- C++:指针元素的向量在销毁时是否会自动释放每个指针所指向的动态内存?
- 打印整数指针元素时的结果不同
- 访问 c++ 的矢量指针元素
- 我必须手动删除QSet的每个(指针)元素吗?
- push_back在一行中指向Vector的非指针元素