[英]QMap/QHash operator[] returned reference validity
我想知道Qt容器内的值的引用有多长,特别是QHash
或QMap
是有效的。 有效我的意思是,如果在插入或删除其他元素后仍保证指向map / hash中的正确位置。
让我们以下代码:
QHash<char,int> dict; // or QMap<char,int> dict;
dict.insert('a', 1);
int& val(dict['a']);
dict.insert('b', 2);
val = 3; // < will this work or lead to a segfault
将在最后一行的值设置关联的值正确更新a
到3
还是会导致段错误还是会是不确定的(有时这样的工作,段错误其他时间,具体取决于数据结构是否必须进行内部重组,比如调整散列表数组的大小)。 QMap
和QHash
的行为是否相同,或者一个是否有效,另一个不行?
这完全包含在文档中 - 您一定错过了它!
当由于调用非const成员函数而修改容器中的数据或从隐式共享副本中分离时,两种类型的迭代器都将失效。
因此,虽然我希望迭代器/引用在上面描述的场景中仍然有效,但您不应该依赖于此。 以这种方式使用它们将调用未定义的行为。
这适用于QHashIterator
和QMutableHashIterator
,以及裸引用。 谨防声称相反的非权威性引用,依赖于可能随时更改的实现细节。
除非删除要引用的节点,否则在QMap / QHash元素中使用引用没有任何问题。 每次插入新元素时,都不会重新分配qt容器的元素。 但是我看不出使用容器元素引用的任何好理由。
有关更多详细信息,请查看有关qt容器内部实现的优秀文章
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.