与This question有关。
C ++ 11增加了将异常编组到不同线程(使用std::exception_ptr
)并恢复其传播的功能。
我想知道这样的传播是否是自动的,即:如果我在一个线程中无法处理异常,它是否会在父线程中自动传播?
我有点怀疑它(或者它必须以某种方式明确地等待join
),但我对C ++ 11还不够精明。值得注意的是,我认为在std::future
的情况下,它可以自动存储异常。
答案 0 :(得分:9)
thread
不会自动传播。如果一个线程抛出,并且没有捕获到该异常,程序将终止,无论如何。
future
和shared_future
会在子线程中存储未捕获的异常。然后,在调用get
时会自动传播该异常。