条件に基づいて boost::shared_ptr を初期化する必要があります。以下のサンプル コードは、私が探しているシナリオを示しています。
class A{};
class B:public A{};
class C:public A();
void some_func(int opt)
{
boost::shared_ptr<A> abstract_ptr;
if(opt==RELEVENT_TO_B)
{
abstract_ptr(new B);
}
else
{
abstract_ptr(new C);
}
}
上記のコードサンプルは間違っています。boost::shared_ptr<A> Abstract_ptr
の 2 行目でsome_func()
は、引数を取らない shared_ptr コンストラクターを使用して shared_ptr オブジェクトを作成します。代入演算子が定義されておらず、初期化後に生のポインターを受け取る shared_ptr がないため、if-else 内のコードが間違っています。
私の質問は、boost::shared_ptr を使用してこれ (some_func に示されている条件付き初期化) を適度に達成する方法です。