In C++ 11 with LLVM 6.0 on Mac OS X, I first created a pointer to a memory allocation of std::thread.
std::thread* th = new std::thread([&] (int tid) {
// do nothing.
}, 0);
Then I tried to delete it.
delete th;
However, compiling the above code and execute it raises exception
libc++abi.dylib: terminating
Abort trap: 6
The thread you've created is joinable
, and unless you join
or detach
it, std::terminate
will be called when the destructor of the thread object executes. So you need
th->join();
delete th;
Early proposals for std::thread
implicitly detach
ed the thread in the destructor, but this was found to cause problems when the owning thread threw an exception between creation and join
ing of a thread
instance. N2802 contains the change proposal along with illustrative examples.
The original behavior was carried over from boost::thread
but it too has since deprecated implicit detach
in the destructor.
Unrelated to your problem, but it is very unlikely you need to dynamically allocate the thread object, and even if you do, you should be storing it in a unique_ptr
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With