c++ - 使用 C++17 特性更好地从容器中删除所有指针
问题描述
在 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.
推荐阅读
- macos - 如何在同一台 Mac 设备上快速将网页链接从 chrome 发送到 safari?
- python - Sphinx 未正确显示代码文档
- javascript - 无法第二次调用 peer.on("track", ...)
- c - C 中的 for 循环 ;for(conditions); 一个命令;
- python - 从列表中拉出随机元素以达到所需的总和
- android - 在受信任的 Web 活动中更改启动图像的大小
- python - 如何在linux的python列表中使用xdotool ctrl+c数据保存url
- c++ - 如何从mingw、c++(或c)获取和设置环境变量
- linux - 为什么我的 bash 代码在写入文件时会发生变化?
- node.js - Delphi 和 Node.js 之间的 SHA256 差异