我收到針對我的 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;
};
uj5u.com熱心網友回復:
這意味著您使用以下陳述句創建容器:m_registeredResponseObjects.keys()沒有充分的理由。此函式迭代您的 m_registeredResponseObjects,收集所有鍵并回傳一個容器,然后您在其中迭代僅通過鍵從 m_registeredResponseObjects 獲取值。這根本沒有意義——為什么不簡單地
for (auto val : qAsConst(m_registeredResponseObjects))
delete val;
甚至使用 Qt 宏 qDeleteAll() 更簡單
qDeleteAll(m_registeredResponseObjects);
?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/434937.html
