使用 dynamic_pointer_cast 时出现异常 0xC0000409(堆栈缓冲区溢出)

Exception 0xC0000409 (stack buffer overflow) when using dynamic_pointer_cast

我在尝试 dynamic_pointer_cast 类型 A 的共享点键入 B 时遇到崩溃。
类型 B 与类型 A 无关,我希望一个空 shared_ptr 但相反,会引发上述异常。
是否存在使用 dynamic_pointer_cast 不安全的情况?

此处出现异常:

使用 MSVC 14.16.27023

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

另一种选择是测试

的结果
dynamic_cast<decltype(destination_ptr.get())>(source_ptr.get())

如果成功则调用 std::dynamic_pointer_cast 否则 return 一个空指针。