规范(? – 从cppreference得到它)指出:
~thread(); (since C++11)
Destroys the thread object. If *this still has an associated running thread
(i.e. joinable() == true), std::terminate() is called.
我已经检查过在线程内调用std :: terminate()会中止整个程序.
所以为了检查析构函数行为,我编写了这段代码:
#include <iostream>
#include <thread>
#include <memory>
int main() {
std::unique_ptr<std::thread> thread_ptr(new std::thread([](){
std::cout << "Starting thread: " << std::endl;
while(1) {}
}));
while(!thread_ptr->joinable()){}
std::cout << thread_ptr->joinable() << std::endl;
thread_ptr.release();
std::cout << "Main is still alive!" << std::endl;
return 0;
}
期待整个过程的中止.
没有发生这样的事情,所有输出都是消息的排列,例如:
1Starting thread:
Main is still alive!
我正在使用g:线程模型:posix,gcc版本4.8.1(Ubuntu 4.8.1-2ubuntu1~12.04)
我对规格有错误的理解吗?错误的代码?或者g不仅符合此规范吗?
最佳答案 你可能意味着thread_ptr.reset()而不是thread_ptr.release(). release()放弃指针的所有权,即泄漏std :: thread实例,因此从不调用它的析构函数.