为什么这是分配一个不需要的临时容器

Why is this allocating an unneeded temporary container

我收到针对我的 foreach 循环的警告,说我正在“分配一个不需要的临时容器”,但我不知道那是什么意思。

foreach(QString commandName, m_registeredResponseObjects.keys()) {
    delete m_registeredResponseObjects[commandName];
};

这是否意味着循环的每次迭代都会调用 key() 方法?我什至没有看到警告所引用的容器...

foreach 是一个 Qt 宏定义为

template <typename T>
class QForeachContainer {
public:
    inline QForeachContainer(const T& t) : c(t), brk(0), i(c.begin()), e(c.end()) { }
    const T c;
    int brk;
    typename T::const_iterator i, e;
};

这意味着您创建容器时没有充分理由使用此语句:m_registeredResponseObjects.keys()。此函数迭代您的 m_registeredResponseObjects,收集所有键和 returns 一个容器,然后您在其中迭代仅通过键从 m_registeredResponseObjects 获取值。 这根本没有意义 - 为什么不简单地

  for (auto val : qAsConst(m_registeredResponseObjects))
    delete val;

或者使用 Qt 宏 qDeleteAll()

甚至更简单
  qDeleteAll(m_registeredResponseObjects);

?