Str*_*rin 4 c++ multithreading c++11 stdthread
在Mac OS X上使用LLVM 6.0的C++ 11中,我首先创建了一个指向std :: thread内存分配的指针.
std::thread* th = new std::thread([&] (int tid) {
// do nothing.
}, 0);
Run Code Online (Sandbox Code Playgroud)
然后我试着删除它.
delete th;
Run Code Online (Sandbox Code Playgroud)
但是,编译上面的代码并执行它会引发异常
libc++abi.dylib: terminating
Abort trap: 6
Run Code Online (Sandbox Code Playgroud)
Pra*_*ian 15
您创建的线程是joinable,除非您join或detach它在线程对象std::terminate的析构函数执行时被调用.所以你需要
th->join();
delete th;
Run Code Online (Sandbox Code Playgroud)
早期的建议std::thread隐含detach编在析构函数的线程,但这个发现当拥有线程扔创作之间的异常导致问题join一的ING thread实例.N2802包含更改提议以及说明性示例.
最初的行为是从结构中转移出来的,boost::thread但它也已经在析构函数中隐式弃用detach了.
与您的问题无关,但您不太可能需要动态分配线程对象,即使您这样做,也应该将其存储在unique_ptr.