multithreading – 可连接std :: thread的析构函数

规范(? – 从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实例,因此从不调用它的析构函数.

点赞