好的,咱们今天就来聊聊 C++ 里一个挺有意思的家伙:std::exception_ptr。这家伙专治各种不服,尤其是那些想跨线程搞事情的异常。 开场白:异常,线程,和那些不得不说的故事 各位听众,你们有没有遇到过这样的场景:主线程辛辛苦苦跑着,突然某个后台线程炸了,抛了个异常。你心想:没事,我抓一下,报告个错误,顶多重启一下。结果呢?抓了个寂寞!异常根本没影儿了! 这就是线程之间的恩怨情仇。异常这东西,默认情况下,它就乖乖地待在自己被抛出的线程里,除非你采取一些措施,否则它才懒得跨线程跟你玩。 std::exception_ptr,就是为了解决这个问题而生的。它就像一个“异常快递员”,负责把一个线程里的异常打包好,安全地送到另一个线程里。 std::exception_ptr 是个啥? 简单来说,std::exception_ptr 是一个智能指针,它指向的是一个异常的拷贝。注意,是拷贝! 你可以把它想象成一个“异常快照”,把你想要传递的异常的状态冻结起来,然后通过这个指针,你就可以在另一个线程里重新抛出这个异常,或者查看异常的信息。 怎么用?上代码! 咱们先来个最简单的例子,看看 …