boost::multi_index指针/引用稳定性:哪些操作会使其失效?
boost::multi_index 中会导致指针/引用失效的操作
在boost::multi_index容器中,指向元素的指针和引用的稳定性直接绑定元素是否被移除——只要元素未从容器中删除,指针和引用就会始终有效(重哈希、元素在索引中重新排序等操作都不会导致它们失效)。会触发指针/引用失效的操作仅有以下几类:
- 调用容器的
clear()方法:清空容器内所有元素后,指向原元素的指针和引用全部失效。 - 调用任意
erase()重载方法:无论是通过迭代器、键值范围还是条件删除元素,被删除元素对应的指针和引用都会立即失效。 - 调用
extract()方法后丢弃返回的节点:extract()会将元素从容器中移除并返回持有该元素的节点对象,若此节点被销毁且未重新插入容器,原元素的指针和引用会失效。
额外说明:
replace()、modify()、modify_key()这类修改元素内容的操作,哪怕导致元素在有序/哈希索引中重新定位,也不会改变元素的内存地址,因此指针和引用依然有效。rehash()、reserve()等调整哈希表容量的操作,仅修改索引内部结构,不会移动元素本身,指针和引用不受影响。
内容的提问来源于stack exchange,提问作者Andy Shulman
相关产品推荐
相关产品推荐

