指向动态容器的指针是否持久化

Does Pointer to Dynamic Container Persist?

本文关键字:指针 是否 持久化 动态      更新时间:2023-10-16

我知道动态数据结构,如向量、列表、映射和集合在堆上自主分配它们的元素,因此,如果数据结构被修改,我不能将指向元素的指针并期望它保持有效。但是,我是否可以创建一个指向结构本身的指针,并确保它始终有效呢?我假设这个结构在堆栈中有某种锚点,它总是有相同的地址或什么的,不管它的元素分配在哪里……

?

所以,我可以安全地做这样的事情与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将一直活动到函数结束。