私は時代とともに移動しており、自分自身を使ってスマートポインタに自分自身を公開するという目的で新しいプロジェクトを開始するべきだと思った。私はunique_ptr
の大きなプールに衝突コンポーネントを格納することを考えています。これらのコンポーネントは、const refによって、ptrs上で読み取り専用のopsを内部的に実行するクワッドツリーに渡されます。
私は実装の意図を反映するための簡単な例を書いています。複数のインスタンスがunique_ptrへの参照を保持
struct Owner
{
unique_ptr<int> uPtr;
};
struct SomeContainer
{
list<const unique_ptr<int>*> uPtrList;
void Insert(const unique_ptr<int>& borrowedUPtr)
{
list.push_back(&borrowedUPtr);
}
void DoSomething()
{
for(const auto& ptr : uPtrList)
// Perform read ops
}
};
これらは私の意図している: Owner
はunique_ptr
を所有し、それによってその寿命を制御します。 SomeContainer
は、ポインターへのconst参照を格納しません。これは、ポインターのリセットも変更も許可されていないためです。
これは実行可能なアプローチですか、私は力を乱していますか?
この時点で 'list'を使用することもできます。 'unique_ptr'の状態が実際に指しているオブジェクトよりももっと興味を持っていない限り、そうではありません。 –
私には、所有者は 'std :: shared_ptr'を持っていて、' SomeContainer'はそれらの 'shared_ptr'に対して' std :: weak_ptr'を保持する必要があります。私はあなたがそれらを 'const'にすることができるかどうか分かりません。 – NathanOliver
あなたのリストにはunique_ptrsへのポインタが含まれています...私はそれが理にかなっているとは思わない。 unique_ptrは所有権に関するものです。 SomeContainerが所有していない場合は、代わりにconst *を使い、unique_ptrは使用しないでください。 SomeContainerが元の所有者と所有権を共有するようにしたい場合は、shared_ptrの使用をよくしてください。 – AlexG