我有一个类将weak_ptr 存储在容器中,如果weak_ptr 未过期,稍后会执行一些操作:
class Example
{
public:
void fill(std::shared_ptr<int> thing)
{
member.push_back(thing);
}
void dosomething() const
{
for (const auto& i : member)
if (!i.expired())
;// do something. the weak_ptr will not be locked
}
private:
std::vector<std::weak_ptr<int>> member;
};
如果Example
是一个永远存在并fill
定期使用的对象,则向量会不断为元素分配内存,但它们在过期后永远不会被删除。
是否有任何自动 C++ 方法来摆脱容器中过期的weak_ptrs,或者是否有更好的方法来存储可变数量的它们?
fill
我幼稚的方法是每次调用容器时都遍历容器并删除所有过期的weak_ptrs。在容器中有许多元素并且经常调用填充的情况下,Example
这似乎非常低效。