【发布时间】:2015-09-30 08:59:55
【问题描述】:
我有一个 unordered_map 对象。每个对象在其析构函数中浏览无序映射以查找其他对象,然后调整这些其他对象。如果其他对象是僵尸对象,这将失败,但如果其他对象完全从 unordered_map 中删除,则没有问题。
我的问题:
- 如果我擦除()一个对象,并且它的析构函数试图在无序映射中寻找自己,这是否有效?具体来说,是先调用析构函数,还是先从unordered_map中取出对象,还是没有保证?
- 如果 unordered_map 被破坏,这会起作用吗?具体来说,当调用每个单独的析构函数时,unordered_map 是否处于有效状态?
【问题讨论】:
-
用一些打印语句来测试一下?
-
erase 只会使其自己的迭代器无效,但我认为您不能假设一旦调用析构函数就可以在地图中找到自己。也不要假设如果您测试并且它适用于一种实现,它将适用于标准库的其他实现。正如@KerrekSB 所说 - 不要这样做
标签: c++ standard-library