在 C++17 之前,从映射中删除所有指针如下所示:
for (TMapBuffOnAttrs::iterator it = m_map_buff_on_attrs.begin(); it != m_map_buff_on_attrs.end(); it++)
{
if (NULL != it->second)
{
delete(it->second);
}
}
m_map_buff_on_attrs.clear();
使用 C++17,我们得到:
for (auto it = m_map_buff_on_attrs.begin(); it != m_map_buff_on_attrs.end(); it++)
{
if (NULL != it->second)
{
delete(it->second);
}
}
有没有更简单的解决方案?
最佳答案
是的。
for (auto it = m_map_buff_on_attrs.begin(); it != m_map_buff_on_attrs.end(); it++)
因为您只使用值 *it
而没有来自该迭代器的其他数据,for-range 循环会更简单。
if (NULL != it->second)
{
delete(it->second);
}
删除 NULL
定义明确且没有任何效果,这是一个您可以跳过的测试。
给出:
for (auto& p : m_map_buff_on_attrs) {
delete p.second;
}
操作原始指针很容易出错,会让你写出更多无用的代码。如果 m_map_buff_on_attrs
是智能指针的映射,您的代码将只是:
} // m_map_buff_on_attrs goes out of scope and destroys and frees everything.
关于c++ - 使用 C++17 功能更好地从容器中删除所有指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54869863/