多态智能指针的使用

Polymorphic smart pointer usage

本文关键字:指针 智能 多态      更新时间:2023-10-16

到目前为止,我有一个函数正在获取类型为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>());

即使AB相关,std::shared_ptr<A>std::shared_ptr<B>也是不同的类型,对吧?

std::shared_ptr<T>可从std::shared_ptr<U>隐式构造,当且仅当U *可隐式转换为T *。请参阅cppreference.com上的构造函数重载(9)。

它之所以有效,是因为std::shared_ptr有一个临时构造函数,当存在从源指针类型到目标指针类型的隐式转换时,该构造函数才有效。