给自己一个std::shared_ptr<std::thread>。已定义或未定义的行为

Giving a std::shared_ptr<std::thread> to itself. Defined or Undefined behavior

本文关键字:std 定义 gt 未定义 thread 自己 一个 shared lt ptr      更新时间:2023-10-16

我有以下te代码:

void launchThread() {
    std::shared_ptr<std::thread> t;
    t = std::make_shared<std::thread>([t] {std::cout<< "HelloWorld"<<std::endl;});
    t->detach();
}
int main(){
    launchThread();
    somthing that takes a while.... 
}

如果我正确,则斜线应使用共享指针保持生命,直到线程本身用尽范围为止。但是我想知道当共享指针被破坏时会发生什么,是否正确清洁线程?还是这是不良习惯?

std::thread::detach释放所有权 - 当shared_ptr销毁时,分离的执行线程将不会发生任何事情。

这是不好的做法,因为您可以简单地写...

std::thread{[]{ std::cout<< "HelloWorld" << std::endl; }}.detach();

...要产生一个自身清理的背景线程。