非常に多くのshared_ptrsを使用する代わりの方法を探していたところ、コメントセクションで優れた返信が見つかりました。
本当に共有所有権が必要ですか?立ち止まって数分間考えれば、オブジェクトの1人の所有者とそのユーザーの数を正確に特定でき、所有者の存続期間中にのみ使用されると確信しています。したがって、それを所有者のローカル/メンバーオブジェクトにし、それを使用する必要がある人に参照を渡すだけです。
これを実行したいのですが、問題は、所有オブジェクトの定義で、最初に所有オブジェクトを完全に定義する必要があるということです。たとえば、FooManager.hに次のものがあるとします。
class Foo;
class FooManager
{
shared_ptr<Foo> foo;
shared_ptr<Foo> getFoo() { return foo; }
};
さて、上記のアドバイスを受けると、FooManager.hは次のようになります。
#include "Foo.h"
class FooManager
{
Foo foo;
Foo& getFoo() { return foo; }
};
これには2つの問題があります。まず、FooManager.hは軽量ではなくなりました。これを含むすべてのcppファイルは、Foo.hもコンパイルする必要があります。次に、fooが初期化されるタイミングを選択できなくなりました。FooManagerと同時に初期化する必要があります。これらの問題を回避するにはどうすればよいですか?