到目前为止,我有一个函数正在获取类型为 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
是相关的,对吧?
最佳答案
A std::shared_ptr<T>
可以从 std::shared_ptr<U>
隐式构造当且仅当 U *
可以隐式转换为 T *
.查看构造函数重载 (9) on cppreference.com
.
关于c++ - 多态智能指针的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33632549/