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