В простых случаях, подобных этому точному примеру:
class C
{
shared_ptr<Base> const x;
public:
C( bool type )
: x( type
? static_cast<Base*>( new Derived_0 )
: static_cast<Base*>( new Derived_1 ) )
{
}
};
(И да, static_cast
, или хотя бы один из них, необходимы.)
В более общих случаях, когда логика принятия решений более сложна, вы
может захотеть создать статическую функцию, которая возвращает shared_ptr
,
e.g.:
class C
{
shared_ptr<Base> const x;
static shared_ptr<Base> makeSharedPtr( bool type );
public:
C( bool type )
: x( makeSharedPtr( type ) )
{
}
};
Это позволит любую мыслимую логику (и более сложный набор
параметры).