首页 > 解决方案 > 使用指针对象的 std::vector。有没有办法在超出范围时从向量中删除一个项目?

问题描述

我正在从老派C++ 到“现代”的心理转变。

我有一个类工厂,用于确保某个类的所有实例foo都保存在列表中。此列表用于foo按顺序处理所有 s。

这是在使用常规旧指针(new/ delete)的遗留系统中,但我正在考虑将它们变成shared_ptrs。

我仍然需要RemoveMeFromList()在 's 的析构函数中调用 " "foo还是有一些我不知道的魔法?

标签: c++pointersshared-ptrsmart-pointers

解决方案


在这种情况下,我建议您在std::weak_ptr工厂中保留一个弱指针 ( ) 向量:

std::vector<std::weak_ptr<foo>> foo_instances;

现在,有了这个向量,如果一个指针超出范围,它将过期。因此,您可以在下次处理向量时删除过期的指针。换句话说,您不需要显式的“RemoveMeFromList”方法,但您可以在处理 foo 实例时删除过期指针。


推荐阅读