关联容器中的 std::array data() 失效的风险
Risk of invalidation of std::array data() in associative container?
请考虑以下事项:
std::unordered_map<int, std::array<float,50>> foo;
...
auto pointerToArray = foo.at(3).data();
我读过这个和这个。我有以下问题:
- 1)
pointerToArray
在提到无效规则、迭代器还是引用? - 2)
pointerToArray
被失效的风险是什么(假设它在foo
中的配对密钥没有被删除)? - 3)这些问题的答案有什么区别(如果有的话)
unordered_map
和map
之间的问题?
与vector
不同,array
本身不会重新分配,因此它不会自行更改内存地址,但是由于它在无序/映射中,绘图会变厚。
更新:发现了另一个问题,表明在这种情况下没有无效的风险。
根据您提供的第一个链接提供的信息,pointerToArray
不应因对地图所做的任何后续更改而失效,除非您要从地图中删除元素本身。std::array<float, 50>
对象将存储在堆中,并且只有指向该对象的指针(或可能的引用,取决于std::unordered_map
的实现方式)将在映射中随机播放。
相关文章:
- 如何处理 c++ 中类实现中的"invalid use of non-static data member"?
- 不明白迭代器,引用和指针失效,一个例子
- 'string.assign(string.data(), 5)' 是明确定义的还是 UB?
- 收到错误"invalid use of non-static data member 'stu::n' "
- C++ 初始化 .data 部分中的变量
- 模式"allocate memory or use existing data"
- boost::asio data owning `ConstBufferSequence`
- C++,您能否设计一种数据结构,将指针保存在连续内存中并且不会使它们失效?
- std::unordered_map::提取引用/指针失效
- Python to C++ Data structure API
- 当初始值设定项是基类名时'initializer does not name a non-static data member or base class'错误
- protobuf C++ SQLite handle blob data
- 错误:字段'dateOfBirth'的类型不完整'Poco::Data::Date'
- 为什么构造函数 Message(const T&data) 与 Message(T&& data) 冲突,当 T = int&时?
- "thread-safe data"与"thread-safe code/functions"的区别
- 如何找到目标文件 *.o 的 ram rom 使用情况(.bss .text .rodata .data)?
- 这在C++ "It does not own the underlying data, and so is cheap to copy or assign"中意味着什么
- 使用 .data() 将字符数组转换为 std::string 不会转换整个数组
- *(int*)&data[18]在这段代码中实际上做了什么?
- 关联容器中的 std::array data() 失效的风险