クラス(A)内に、基本的に別のクラス(B)へのポインターをパラメーターとして受け取る関数があります。Bクラスは、他の複数のクラスにも継承され、それらも受け入れる必要があります。
私がやりたいのは、このポインタの所有権を取得して、後でクラスで使用するために保存することです。このポインタは、他の目的でクラスの外部で再び使用されることはありません。パラメータをshared_ptrにしますが、一緒に作業している他の人がスマートポインタのすべてを完全に理解していないため、これはできるだけ避けたいと思います。これを行う方法はありますか?
これが私がやりたいと思う一種の例ですが、私がテストしたことからはこれは機能しません。
//In .h file
std::vector< unique_ptr< B > > data_store;
//In .cpp file
void A::add_data(B* NewItem)
{
data_store.resize(data_store.size()+1);
data_store[data_store.size()-1] = NewItem;
}
次に、コピーコンストラクターなどを使用して、クラス内でスマートポインターを使用したいと思います。手動で削除する必要がある場合は、やらなければならないことが少し醜くなる可能性があります。それに関する問題は、それが入ってくる基本クラス(B)なのか、それともBから継承したクラスなのかわからないということです。クラスのチェック可能なIDの一種であり、正しいコピー/移動コンストラクターを使用します。これは絶対に避けたいと思います。
2012年3月12日の英国時間午前10時頃に更新したllvmから更新されたClangとlibC++を使用しています。