c++ - 多态智能指针的使用

标签 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>即使 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/

相关文章:

c++ - 禁用 std::map::at()

C++11 右值引用寻址

c++ - 使用 SDL2 在每一帧上渲染屏幕的一部分

C++,引用 "constructor"

c++ - 可以采用 lambda 或函数指针并推断参数以传递给另一个模板的模板函数

c++ - 是否可以根据 lambda 采用的参数数量专门化采用 lambda 表达式的模板函数?

c++ - 与成员函数中的 std::move(*this) 的行为差异

c++ - 在 C++ 中存储对象类型的好方法是什么?

c++ - 对象在 C++ vector<Object*> 中变为空

c++ - 在排序的 std::list 中搜索的复杂性是什么?