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



我收到一个针对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,收集所有键并返回一个容器,然后在该容器中仅迭代m_registered ResponseObject中的值(按键(。这毫无意义——为什么不简单地呢

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

或者使用Qt宏qDeleteAll((更简单

qDeleteAll(m_registeredResponseObjects);

最新更新