C ++で参照のリストまたはマップを作成し、それらが破棄されるとその要素を自動的に削除したいと思います。これがそのアイデアを示す構造です。
class Foo;
class Bar
{
Foo foo;
};
void main(void)
{
std::vector<Foo> foos;
{
Bar bar;
foos.push_back(bar.foo);
// foos[0] should be the same reference as bar.foo
}
// bar is now destructed
// foos.size() should be 0
}
私のコードには2つの問題があります。std :: vectorで呼び出されるとpush_back()
、Fooオブジェクトのコピーが作成されます。foos
の要素はで行われた変更を反映する必要があるため、これは受け入れられませんbar.foo
。次に、foos
ベクターが参照を格納できたとしても、作成されたスコープを離れた後、Fooオブジェクトはリストから削除されませんbar
。理想的には、Foo参照がfoos
破棄されたときに削除されるようにしたいと思います。
独自のソリューションを実装する前に、これを提供するサードパーティのライブラリ(Boost、おそらく?)、またはこれに使用する必要のある適切な手法や戦略について知りたいと思います。ありがとう!