【发布时间】:2017-07-18 19:11:31
【问题描述】:
我有 QMap 存储对象,我想存储指向这些对象的指针以进行一些外部处理。从映射中插入/删除某些值后,指向对象的指针是否仍然有效?举例说明:
QMap <QString, QString> map;
map.insert("one", "one");
map.insert("two", "two");
map.insert("three", "three");
QString *pointer = &map["one"];
qDebug()<<*pointer;
map.insert("aaa", "aaa");
map.insert("bbb", "bbb");
qDebug()<<*pointer;
map.insert("zzz", "zzz");
map.insert("xxx", "xxx");
qDebug()<<*pointer;
是否保证pointer 在任意数量的插入/删除后将指向完全相同的对象(当然考虑到该对象没有被删除)
或者我应该考虑存储指针而不是对象?
【问题讨论】:
-
映射中的值是按值存储的,即使在这种情况下,这意味着指针(它指向的地址)是按值存储的 For example
-
您是否考虑过改用
std::map?标准容器的失效规则有完整的文档记录,并且可以更普遍地理解。 -
This link 表示插入
QMap不会使迭代器无效。 “如果您将项目添加到地图中,现有的迭代器将保持有效。” 可能还会保留指向现有元素的指针,但没有明确说明。