Summary: | false positives in container-anti-pattern | ||
---|---|---|---|
Product: | [Developer tools] clazy | Reporter: | Nyall Dawson <nyall.dawson> |
Component: | general | Assignee: | Unassigned bugs mailing-list <unassigned-bugs> |
Status: | RESOLVED NOT A BUG | ||
Severity: | normal | CC: | smartins |
Priority: | NOR | ||
Version: | unspecified | ||
Target Milestone: | --- | ||
Platform: | Other | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | ||
Sentry Crash Report: |
Description
Nyall Dawson
2016-02-12 09:32:23 UTC
Your first example allocates once (due to keys() call), and it should allocate 0. Use instead: for (auto it = someMap.cbegin(), end = someMap.cend(); it != end; ++it) Your second example allocates twice (due to keys call) and it should allocate once, construct the set manually instead. This is what happens when you call keys(): template <class Key, class T> Q_OUTOFLINE_TEMPLATE QList<Key> QHash<Key, T>::keys() const { QList<Key> res; res.reserve(size()); const_iterator i = begin(); while (i != end()) { res.append(i.key()); ++i; } return res; } You would be iterating twice instead of iterating the map directly. I can update the README and make it more clear. Ah, ok. I get it now... Thanks for the pointers! |