C++ C++;地图销毁

C++ C++;地图销毁,c++,map,destructor,C++,Map,Destructor,我想清除析构函数中的一个映射,但我不知道它是否为空。我可以按如下方式清除它吗 for(std::map<int, int *>::iterator it = m_map.begin(); it != m_map.end(); ++it) { delete it->second; } m_map.clear(); for(std::map::iterator it=m_-map.begin();it!=m_-map.end();++it) { 删除它->秒;

我想清除析构函数中的一个映射,但我不知道它是否为空。我可以按如下方式清除它吗

for(std::map<int, int *>::iterator it = m_map.begin(); it != m_map.end(); ++it)
{ 
   delete it->second;
}
m_map.clear();    
for(std::map::iterator it=m_-map.begin();it!=m_-map.end();++it)
{ 
删除它->秒;
}
m_map.clear();


或者我应该在上面的操作周围放置一个if条件,比如if(!m_map.empty()){},以检查它是否为空

对于空映射,代码正常。m_map.begin()将等于m_map.end(),因此如果映射为空,for循环体将不会执行。

对于空映射,代码是可以的。m_map.begin()将等于m_map.end(),因此如果映射为空,for循环体将不会执行。

如果为空,则for循环不会执行,因此不会产生任何差异。

如果为空,则for循环不会执行,因此不会产生任何差异。

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

如果映射为空,
m_-map.begin()
将与
m_-map.end()相同,所以这个循环不会做任何事情
m_map.clear()
(或者更确切地说,
~std::map
会发生,但这会发生,
clear()
或等效的)将由编译器作为析构函数的一部分提供的析构函数自动发生,因此不需要。

循环很好。如果地图是空的,什么也不会发生。另外,您不需要调用
m_map-clear()。你确定吗?我认为delete只会删除指针,我们还需要清除映射本身。好的,我也会删除clear。我得到了它。谢谢,我相信。映射超出范围时将被清除。@AvbAvb:编译器将为类的析构函数添加
m_map
的析构函数,因此它将被清除。使用智能指针进行内存管理可以吗?这将比破坏更容易操作。循环很好。如果地图是空的,什么也不会发生。另外,您不需要调用
m_map-clear()。你确定吗?我认为delete只会删除指针,我们还需要清除映射本身。好的,我也会删除clear。我得到了它。谢谢,我相信。映射超出范围时将被清除。@AvbAvb:编译器将为类的析构函数添加
m_map
的析构函数,因此它将被清除。使用智能指针进行内存管理可以吗?这将比破坏更容易操作。@Mats:谢谢。@Mats:谢谢。谢谢Mats。我不知道,谢谢你。我不知道。