std::unique_ptr指向的std::map发生内存重分配后是否仍有效?
问题解答
首先明确两个核心点:
mContainer是指向**std::map对象本身**的std::unique_ptr,而非指向map内部存储的键值对节点。std::map属于节点式容器,插入元素时只会为新增的键值对单独分配节点内存,不会对map对象自身的内存进行重分配。
结论:
无论map内部插入多少元素,mContainer指向的map对象的内存地址始终不变,该指针始终有效。哪怕map内部节点发生内存分配或释放,都不会影响mContainer指针的有效性——因为它指向的是容器对象本身,而非内部的节点数据。
补充说明:
如果是std::vector这类连续存储容器,扩容时是内部数据缓冲区重分配,但容器对象自身的内存也不会改变;而map的结构决定了它根本不会出现容器对象内存变动的情况,所以指向它的指针自然不会失效。
内容的提问来源于stack exchange,提问作者vsian_
相关产品推荐
相关产品推荐

