我需要根据条件初始化 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
在第二行中,some_func()
将创建一个 shared_ptr 对象,其带有不带参数的 shared_ptr constrcutor,并且由于没有定义赋值运算符并且在初始化后没有 shared_ptr 采用原始指针,因此 if-else 中的代码是错误的。
我的问题是,如何使用 boost::shared_ptr 适度地实现这一点(如 some_func 中所示的条件初始化)。