c++ - 使用 dynamic_pointer_cast 通过引用获取 shared_ptr

标签 c++ c++11 shared-ptr

是否可以通过引用从 dynamic_pointer_cast 获取返回值,还是会导致问题?

struct A
{
};

struct B : public A
{
};

int main()
{
  shared_ptr<A> b = make_shared<B>();
  auto &a = dynamic_pointer_cast<A>(b);
  //auto a = dynamic_pointer_cast<A>(b);

  return 0;
}

最佳答案

即使它可能的,它也不会做你想做的事:

[The aim is that] the reference counter is not increased

仍会增加,因为 dynamic_pointer_cast 无论如何都会返回一个 shared_ptr 拷贝。

您的代码不起作用,因为引用将绑定(bind)到 dyanamic_pointer_cast 返回的临时对象,这是被禁止的。

使用 const 引用会起作用(因为 const& 被允许绑定(bind)到一个临时对象)但结果仍然是相同的:转换会创建一个 新建 shared_ptr 实例,并增加引用计数。

关于c++ - 使用 dynamic_pointer_cast 通过引用获取 shared_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10716794/

相关文章:

c++ - C 简单 RingBuffer - 多线程 - 查找关键部分

c++ - 实现将 "plugs"写入流的函数

c++ - 在 namespace 内的 lambda 中使用时找不到运算符重载

c++ - 为什么我要 std::move 一个 std::shared_ptr?

c++ - 如何将元组 <> 剥离回可变参数模板类型列表?

c++ - std::function 成员可以访问其他成员吗?

c++ - 用 std::array 替换 []

c++ - 如何在 Xcode 9.3 中显示 C++ 代码文档?

c++ - 关于shared_from_this()实际使用的问题

c++ - 从基类的共享指针向下转换为派生类的引用