繁体   English   中英

QMap / QHash operator []返回引用有效性

[英]QMap/QHash operator[] returned reference validity

我想知道Qt容器内的值的引用有多长,特别是QHashQMap是有效的。 有效我的意思是,如果在插入或删除其他元素后仍保证指向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

将在最后一行的值设置关联的值正确更新a3还是会导致段错误还是会是不确定的(有时这样的工作,段错误其他时间,具体取决于数据结构是否必须进行内部重组,比如调整散列表数组的大小)。 QMapQHash的行为是否相同,或者一个是否有效,另一个不行?

这完全包含在文档中 - 您一定错过了它!

当由于调用非const成员函数而修改容器中的数据或从隐式共享副本中分离时,两种类型的迭代器都将失效。

因此,虽然我希望迭代器/引用上面描述的场景中仍然有效,但您不应该依赖于此。 以这种方式使用它们将调用未定义的行为。

这适用于QHashIteratorQMutableHashIterator ,以及裸引用。 谨防声称相反的非权威性引用,依赖于可能随时更改的实现细节。

除非删除要引用的节点,否则在QMap / QHash元素中使用引用没有任何问题。 每次插入新元素时,都不会重新分配qt容器的元素。 但是我看不出使用容器元素引用的任何好理由。

有关更多详细信息,请查看有关qt容器内部实现的优秀文章

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM