我想清除析构函数内的地图,但我不知道它是否为空。如果我按照以下方式清除它可以吗?
for(std::map<int, int *>::iterator it = m_map.begin(); it != m_map.end(); ++it)
{
delete it->second;
}
m_map.clear();
还是我应该在上面的操作周围加上一个 if 条件,比如 if(!m_map.empty()){} 以检查它是否为空。
我想清除析构函数内的地图,但我不知道它是否为空。如果我按照以下方式清除它可以吗?
for(std::map<int, int *>::iterator it = m_map.begin(); it != m_map.end(); ++it)
{
delete it->second;
}
m_map.clear();
还是我应该在上面的操作周围加上一个 if 条件,比如 if(!m_map.empty()){} 以检查它是否为空。
如果地图为空,m_map.begin()
则与 相同m_map.end()
,因此循环不会执行任何操作。m_map.clear()
(或者更确切地说~std::map
会发生,但会发生clear()
或等效)将由编译器作为析构函数的一部分提供的析构函数自动发生,因此不需要。
该代码适用于空地图。m_map.begin() 将等于 m_map.end(),因此如果 map 为空,for 循环体将不会执行。
如果它是空的,那么 for 循环将不会执行,所以它不会有任何区别。