コンテナーに weak_ptrs を格納し、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
、ベクトルは要素にメモリを継続的に割り当てますが、有効期限が切れた後に要素が削除されることはありません。
コンテナ内の期限切れのweak_ptrsを自動的に取り除くC++の方法はありますか、それともそれらの可変数を保存するより良い方法はありますか?
私の素朴な方法は、呼び出されるたびにコンテナーを反復処理しfill
、期限切れのすべてのweak_ptrsを削除することです。コンテナ内に多くの要素があり、fill が頻繁に呼び出されるシナリオでExample
は、これは非常に非効率的です。