1. 错误 C2664 “std::function<_Ret (int,int)>::function(std::nullptr_t) noexcept”: 无法将参数 1 从“_Ty”转换为“std::nullptr_t”
如这句代码: std::packaged_task tsk(std::bind(&FutureBase::countdown, this));
由于调用std::bind的时候,没有指定和函数参数匹配的占位符(std::placeholders),正确的写法是:
std::packaged_task tsk(std::bind(&FutureBase::countdown, this, std::placeholders::_1, std::placeholders::_2));
当然你可以用lambda而不用std::bind,如下所示:
std::packaged_task tsk([this](int a, int b) -> int { return countdown(a, b); });
2. 有未经处理的异常: Microsoft C++ 异常: std::future_error,位于内存位置 0x0000006990F9F2B0 处,错误机制如下代码所示:
std::packaged_task task([] { return 7; });
std::thread thr(std::move(task));
...
task();
这个错误导致程序中断。原因是task以及被std::move了.
3. std::mutex 实例被析构引发的错误:
void lock() {
_Check_C_return(_Mtx_lock(_Mymtx()));// 这一行会引发的异常: 0xC0000005
}