【问题标题】:Does Pointer to Dynamic Container Persist?指向动态容器的指针是否存在?
【发布时间】:2015-10-12 05:45:02
【问题描述】:

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

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

【问题讨论】:

    标签: c++ pointers stl containers


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-14
      • 1970-01-01
      • 2015-05-19
      • 1970-01-01
      • 1970-01-01
      • 2017-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多