规范(?-从cppreference获得)声明:
~thread();(自C++11起)
销毁线程对象。如果*this仍然有关联的运行线程(即joinable()==true),调用std::terminate()。
我已经检查过在线程内调用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;
}
要求中止整个过程。
没有发生这样的事情,所有的输出都是消息的排列,比如:
1起始螺纹:
Main还活着!
我使用g++:线程模型:posix,gcc版本4.8.1(Ubuntu 4.8.1-2ubuntu112.04)
我对规格有错误的理解吗?代码错误?或者g++不仅仅符合这个规范?
您可能指的是thread_ptr.reset()
而不是thread_ptr.release()
。release()
放弃指针的所有权,即泄漏std::thread
实例,因此永远不会调用其析构函数。