不是非常明白在那一种情况下会遇到这个坑。我的习惯是在需要得到返回值的时候使用future,在不需要得到返回值或者需要精确控制线程的时候就使用thread。 如果这样的话就不太会遇到这个坑吧? 因为如果是在需要得到返回值的时候使用future,即使是从std::async返回的future, 你为了得到返回值一定会在上面手工调用get()。 在这种情况下future的析构函数就不会阻塞啊。 当然也有一些特殊情况比如在get()之前抛出了异常等等,不过这时候抛出的异常更值得你担心吧。。
反过来看std::future本身的定义,可以清楚的看到这个类就是为了得到返回值而设计的。它的大部分成语函数也都是为了得到返回值设计的。 没有一个成员函数给用户提供了所谓的“启动之后不管了”的选项。 你非要抬扛说返回void之类的那我也不想争论,但是毕竟人家设计这个不是干这个用的,这种情况还是老老实实用thread的不好吗非要强行用future干嘛?
--
FROM 122.115.229.*