我收到一个针对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);