【发布时间】: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