指向动态容器的指针是否持久化
Does Pointer to Dynamic Container Persist?
我知道动态数据结构,如向量、列表、映射和集合在堆上自主分配它们的元素,因此,如果数据结构被修改,我不能将指向元素的指针并期望它保持有效。但是,我是否可以创建一个指向结构本身的指针,并确保它始终有效呢?我假设这个结构在堆栈中有某种锚点,它总是有相同的地址或什么的,不管它的元素分配在哪里……
?所以,我可以安全地做这样的事情与STL动态容器?
int main()
{
std::set<int> s;
std::set<int>* s_ptr = &s;
for (int i = 0; i < 1000000; ++i)
{
s.insert(i);
}
std::cout << s_ptr->size() << std::endl;
}
在我的测试中,这确实有效。但是因为UB,我不能依赖它。
指针的使用是安全的。只要s
还活着,该指针就有效。在本例中,s
将一直活动到函数结束。
相关文章:
- 新分配指向函数的指针是否合法?
- 在函数结束后使用指向变量的指针是否安全?
- C++ 返回指向函数内定义的静态数组的指针是否有效?
- 经过最后一个数组元素末尾的指针是否应该等于超过整个数组末尾的指针?
- 传递给放置 new 的指针是否是指向其对象表示形式的非 UB 指针?
- 'this'指针是否可以在 c++ 标头声明中使用?
- C++ 在向量中使用指针是否可能导致指针悬空?
- 唯一指针是否在堆或堆栈上分配内存?
- 将基本实例指针强制转换为派生实例指针是否合法?(实例不是派生实例)
- 当向量增长时,指向向量元素的C++指针是否无效
- 如何判断指针是否是指向数组的指针
- 在类方法中使用 "this" 指针是否是一种好的做法?
- 如何知道指针是否已在其他地方释放
- 结构成员指针是否自动初始化为零?
- 为静态类创建指向对象的指针是否合法?
- 新的自动关键字指针是否会自行删除?
- 创建指针是否超过非数组指针的末尾,而不是从 C++17 中的一元运算符和未定义的行为派生?
- 检查指针是否指向矢量元素
- 如何创建一个带锁的指针数组并检查指针是否空闲?
- 在映射中插入更多元素后,指向 QMap 中元素的指针是否仍然有效?