A
挿入中に各オブジェクトのコピーを作成せずに、コンテナ オブジェクト内にタイプの複数のオブジェクトを挿入する方法を探していA
ます。1 つの方法は、コンテナーへの参照によってオブジェクトを渡すことA
ですが、残念ながら、私が読んだ限りでは、STL コンテナーは、挿入のために値によるオブジェクトの受け渡しのみを受け入れます (多くの正当な理由により)。通常、これは問題にはなりませんが、私の場合、コピー コンストラクターが呼び出されて元のオブジェクトが破棄されることは望ましくありません。これA
は、C ライブラリのラッパーであり、内部に構造体への C スタイルのポインターがあるためです。 、元のオブジェクトと一緒に削除されます...
特定のインデックスを指定して、そのオブジェクトの 1 つを返し、実行時に決定される特定の数のアイテムを格納できるコンテナーのみが必要なので、独自のコンテナー クラスを作成できるのではないかと考えましたが、方法がわかりません。これを適切に行うこと。
別のアプローチはA
、コンテナー内へのポインターを格納することですが、この件に関する知識があまりないため、STL コンテナー内のオブジェクトへのポインターを挿入する適切な方法は何でしょうか? たとえば、次のようになります。
std::vector<A *> myVector;
for (unsigned int i = 0; i < n; ++i)
{
A *myObj = new myObj();
myVector.pushBack(myObj);
}
うまくいくかもしれませんが、適切に処理する方法ときれいに処分する方法がわかりません。myVector をメンバーとして含むクラスのデストラクタだけに頼って破棄する必要がありますか? 含まれているオブジェクトの 1 つを削除しているときに、このデストラクタが例外をスローするとどうなりますか?
shared_ptr
また、ややのようなものを使うことを提案する人もいauto_ptr
ますunique_ptr
が、私は非常に多くのオプションに混乱しています。私のシナリオに最適なのはどれですか?