通过dynamic_pointer_cast引用获取shared_ptr

时间:2012-05-23 09:09:50

标签: 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;
}

1 个答案:

答案 0 :(得分:2)

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

  

[目标是]参考计数器不会增加

仍然会增加,因为dynamic_pointer_cast无论如何都会返回新的 shared_ptr副本。

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

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