关于这个问题的相关内容。
C++11增加了将异常传递到不同线程的能力(使用std::exception_ptr
),并恢复其传播。
我想知道这样的传播是否是自动的,也就是说:如果我在一个线程中未能处理异常,它会自动传播到父线程吗?
我有点怀疑(或者它必须以某种方式明确等待join
),但我对C++11还不太熟悉。特别是,在std::future
的情况下,我认为它可以自动存储异常。
关于这个问题的相关内容。
C++11增加了将异常传递到不同线程的能力(使用std::exception_ptr
),并恢复其传播。
我想知道这样的传播是否是自动的,也就是说:如果我在一个线程中未能处理异常,它会自动传播到父线程吗?
我有点怀疑(或者它必须以某种方式明确等待join
),但我对C++11还不太熟悉。特别是,在std::future
的情况下,我认为它可以自动存储异常。
thread
不会自动传播异常。如果一个线程抛出异常并且该异常没有被捕获,那么程序无论如何都会终止。
future
和 shared_future
会在子线程中存储未捕获的异常。当调用 get
方法时,该异常将自动传播。