c++ - 使用指针对象的 std::vector。有没有办法在超出范围时从向量中删除一个项目?
问题描述
我正在从老派C++ 到“现代”的心理转变。
我有一个类工厂,用于确保某个类的所有实例foo
都保存在列表中。此列表用于foo
按顺序处理所有 s。
这是在使用常规旧指针(new
/ delete
)的遗留系统中,但我正在考虑将它们变成shared_ptr
s。
我仍然需要RemoveMeFromList()
在 's 的析构函数中调用 " "foo
还是有一些我不知道的魔法?
解决方案
在这种情况下,我建议您在std::weak_ptr
工厂中保留一个弱指针 ( ) 向量:
std::vector<std::weak_ptr<foo>> foo_instances;
现在,有了这个向量,如果一个指针超出范围,它将过期。因此,您可以在下次处理向量时删除过期的指针。换句话说,您不需要显式的“RemoveMeFromList”方法,但您可以在处理 foo 实例时删除过期指针。
推荐阅读
- drupal - 我可以将 entity_reference 的基数设置为配置实体吗?
- javascript - Javascript Diff算法不适用于HTML代码
- android - 我们可以在全局范围内添加@Suppress 标志吗?
- javascript - 使用 html2Canvas 和 jsPDF 保存为 PDF,用于 php 应用程序 1 次在 3 中工作
- python - configparser 不显示部分
- jquery - 已解决:如何在两种颜色之间切换
- c++ - MDIchild 中的 QWidget 问题 - QAbstractScrollArea
- vue.js - 如何在Vuejs中处理浏览器后退按钮单击事件
- sql - Postgres 不使用带有 LEFT JOIN 或 OR in where 的索引
- php - 从 debug_backtrace 动态提取参数