我正在阅读libstdc++-v3std::thread
实现,我看到一个unique_ptr在线程创建后被释放,所以当它运行超出作用域时,新线程可能使用的内存不会被释放。(https://github.com/gcc-mirror/gcc/blob/6b1633378b74bed1d999a0ae2549088515a30ba0/libstdc%2B%2B-v3/src/c%2B%2B11/thread.cc # L152)。就我而言,稍后必须手动删除手动指针,但我找不到在哪里完成的。帮助吗?
Nvm,刚找到。https://github.com/gcc-mirror/gcc/blob/6b1633378b74bed1d999a0ae2549088515a30ba0/libstdc%2B%2B-v3/src/c%2B%2B11/thread.cc#L81它将void*
转换为thread::_State*
到thread::_State_ptr
(这是实际的std::unique_ptr)以使用RAII。这种代码风格在我看来有点难以读懂。我想过删除这个问题,但还是把它留在这里,以防有人感兴趣。