我想知道对Qt容器内的值(尤其是QHashQMap)的引用有效期有多长时间。所谓有效,是指在插入或删除其他元素之后,如果可以保证仍指向 map /哈希内的正确位置。

让我们下面的代码:

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,或者会导致段错误或未定义(因此有时会进行段错误,这取决于是否必须在内部重新组织数据结构,例如调整哈希表数组的大小)。 QMapQHash的行为是否相同,或者一种可行,而另一种不可行?

最佳答案

the documentation全面介绍了这一点-您一定错过了!



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

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

09-11 20:49