On Tuesday, 15 November 2022 23:50:38 PST Marc Mutz via Development wrote: > > in a thread-safe manner (such that if something in > > the same thread or another thread-safely modifies that map, the original > > user isn't affected). > > The above isn't thread-safe, it isn't even re-entrant, in the same way > that iteration using iterators isn't. This is a known issue whenever you > hand out references, and it's nothing that violates our > const-is-thread-safe promise,
No, but it moves the responsibility for avoiding this problem to the user. Right now, you can do: for (auto elem : object.keyList()) { operate(); // may recurse back into object and modify it } If you use a generator paradigm to return this key list, then the *user* must know that they must create a local container with the items to be generated and iterate over that. Performance-wise, this no different than if the Qt code created the container and returned it, but it has two drawbacks: 1) the responsibility for knowing this 2) if the Qt object already has a QList with this, then using a generator paradigm enforces the need of a deep copy, when implicit would have been cheaper > > Because you pointed to QStringTokenizer and that implicitly- > > copies a QString. > > That's imprecise. QStringTokenizer extends rvalue lifetimes ("rvalue > pinning") so's to make this safe: > > for (auto part : qTokenize(label->text(), u';')) BTW, http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2012r2.pdf is accepted for C++23 and moves the end of the temporaries' lifetimes to the end of the full for statement. Though we still need to work with C++17 and 20 for a while. Also, sometimes I wonder if all the work you and I do to optimise these things matter, in the end. We may save 0.5% of the CPU time, only for that to be dwarfed by whatever QtGui, QtQml are doing. -- Thiago Macieira - thiago.macieira (AT) intel.com Cloud Software Architect - Intel DCAI Cloud Engineering _______________________________________________ Development mailing list Development@qt-project.org https://lists.qt-project.org/listinfo/development