指向动态容器的指针是否仍然存在?

时间:2015-10-12 05:45:02

标签: c++ pointers stl containers

我知道动态数据结构(如向量,列表,映射和集合)会自动在堆上分配它们的元素,因此,如果数据结构被修改,我无法获取指向元素的指针并期望它保持有效。但是,我可以指向结构本身,并知道它将始终保持有效吗?我会假设结构在堆栈中有某种锚,它总是有相同的地址或其他东西,无论它的元素分配在哪里......?

所以,我可以使用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,我不能依赖它。

1 个答案:

答案 0 :(得分:3)

您对指针的使用是安全的。只要s处于活动状态,指针就会有效。在这种情况下,s将一直存在,直到函数结束。