到目前为止,我有一个函数正在获取IArg
类型的参数,我可以执行以下操作:
struct IArg
{
};
struct Arg : IArg
{
};
void f (IArg* arg)
{
// do something
}
f(new Arg);
现在,当我得到这个:
void f (std::shared_ptr<IArg> arg)
{
// do something
}
为什么它再次与
f(std::make_shared<Arg>());
即使
std::shared_ptr<A>
和std::shared_ptr<B>
相关,A
和B
是不同的类型,对吗? 最佳答案
当且仅当std::shared_ptr<T>
可隐式转换为std::shared_ptr<U>
时,才能从U *
隐式构造T *
。请参见构造函数重载(9) on cppreference.com
。