0

尝试键入类型dynamic_pointer_cast的共享点时,我遇到了崩溃。 类型与类型无关,我希望为空,但会引发上述异常。 有没有使用不安全的情况?AB
BAshared_ptr
dynamic_pointer_cast

此处引发异常:

在此处输入图像描述

使用 MSVC 14.16.27023

4

1 回答 1

2

std::dynamic_pointer_cast要求U*(源)到T*(目的地)的转换是正确的。如果不是,那么您有未定义的行为。如果你想得到一个空指针,dynamic_cast那么你将不得不编写你自己的版本来做到这一点。

另一种选择是测试结果

dynamic_cast<decltype(destination_ptr.get())>(source_ptr.get())

如果成功,则调用std::dynamic_pointer_castelse 返回一个空指针。

于 2020-02-21T15:07:44.953 回答