可以通过引用从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;
}
答案 0 :(得分:2)
即使 可能,也不会做你想要的事情:
[目标是]参考计数器不会增加
仍然会增加,因为dynamic_pointer_cast
无论如何都会返回新的 shared_ptr
副本。
您的代码不起作用,因为引用将绑定到dyanamic_pointer_cast
返回的临时对象,这是禁止的。
使用const
引用会起作用(因为const&
允许绑定到临时)但结果仍然是相同的:转换将创建 new shared_ptr
的实例,并增加引用计数。