多态智能指针使用

时间:2015-11-10 14:39:12

标签: c++ c++11

到目前为止,我有一个函数正在获取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>相关,

AB也是不同的类型,对吗?

2 个答案:

答案 0 :(得分:8)

std::shared_ptr<T>隐式可由std::shared_ptr<U>构建,当且仅当U *可隐式转换为T *时。请参阅构造函数overload (9) on cppreference.com

答案 1 :(得分:5)

它的工作原理是因为std::shared_ptr有一个tempalted构造函数,当从源指针类型到目标指针类型的隐式转换时,它可以正常工作。