C ++地图破坏

时间:2013-08-13 07:36:00

标签: c++ map destructor

我想在析构函数中清除一个地图,但我不知道它是否为空。如果我按如下方式清除它是否可以。

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条件,以检查它是否为空。

3 个答案:

答案 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循环将不会执行,所以它不会有任何区别。