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

标签 c++ pointers stl containers

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

那么,我可以安全地使用 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++ - 指向动态容器的指针是否持续存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33074022/

相关文章:

c++ - 为什么 C++ 标准中没有 std::basic_string 类的构造函数,其参数为 std::string_view 类型

c - 二维指针数组的内存分配

c++ - 友元函数中的 STL 问题

c++11 - std::vector.push_back(std::move(foo)) 有意义吗?

c++ - QT 构建 ui_mainwindow.h 失败,错误 135 (-1073741515)

c++ - 什么是 undefined reference /未解析的外部符号错误以及如何修复它?

c++ - C++中的命令模式序列化

c++ - 打印时指向常量的指针与指向非常量的指针的行为不同

c++ - C 简单指针示例

c++ - 将 std::pair 的 const 引用传递给函数