可连接std::线程的析构函数



规范(?-从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实例,因此永远不会调用其析构函数。

最新更新