为什么这是分配一个不需要的临时容器
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);
?
我收到针对我的 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);
?