指向动态容器的指针是否持续存在?

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 将一直存活到函数结束。