0

可以通过引用获取返回值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;
}
4

1 回答 1

2

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

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

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

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

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

于 2012-05-23T09:24:25.707 回答