0

我想清除析构函数内的地图,但我不知道它是否为空。如果我按照以下方式清除它可以吗?

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()){} 以检查它是否为空。

4

3 回答 3

3

如果地图为空,m_map.begin()则与 相同m_map.end(),因此循环不会执行任何操作。m_map.clear()(或者更确切地说~std::map会发生,但会发生clear()或等效)将由编译器作为析构函数的一部分提供的析构函数自动发生,因此不需要。

于 2013-08-13T07:40:10.670 回答
0

该代码适用于空地图。m_map.begin() 将等于 m_map.end(),因此如果 map 为空,for 循环体将不会执行。

于 2013-08-13T07:38:48.260 回答
0

如果它是空的,那么 for 循环将不会执行,所以它不会有任何区别。

于 2013-08-13T07:38:50.390 回答