わかりました、状況: createSomeObject() メソッドを持つ、制御できないライブラリを使用しています。このメソッドは、純粋な仮想関数を持つ抽象基本クラスへのポインターを返します。コピー コンストラクターがないため、自分でインスタンス化することもコピーすることもできません (明らかに)。
これらのいくつか (10 としましょう) をベクトルに格納する必要があるため、次のことを試みました。
vector<AbstractBaseClass*> v(10);
for(int i = 0; i < 10; i++)
{
v.push_back(library->createSomeObject());
}
このループが終了するとすぐに、ベクターは壊れたポインターで埋められます。
私は次のことを試しました:
vector<AbstractBaseClass*> v(10);
for(int i = 0; i < 10; i++)
{
AbstractBaseClass* abc = library->createSomeObject();
v.push_back(abc);
}
無駄に。ここで私は頭がおかしくなっているか、何か重大な間違いをしているに違いありません。私は周りを見回しましたが、答えは常にboost::shared_ptrを使用することです. おそらく素晴らしい解決策ですが、これが構築されるマシン上にあるとは保証できないため、Boost をコードでパッケージ化することは避けたいと思います。
足りないものはありますか?これらのいずれかが機能しない理由が思いつかないので、単純なことを忘れているように感じます。