如果我将一个shared_ptr复制到std::thread中,分离该线程,然后销毁该shared_ptr的所有其他拷贝,我可以期望分离的线程继续拥有shared_ptr的实时拷贝吗? 例如,如果我有:
{
std::shared_ptr<Foo> my_foo = std::make_shared<Foo>();
std::thread soon_detached([my_foo = my_foo]() {my_foo->bar()});
soon_detached.detach();
}
我可以相信 bar()
在这种情况下调用是“安全”的吗(因为它不会尝试在正在被破坏/被破坏的 Foo 上调用 bar,即使最初的my_foo
的拷贝超出了范围?
最佳答案
Does a detached thread keep its captured shared_ptr alive?
是的。只要线程正在执行,lambda 以及 lambda 的捕获就会保持事件状态。同样的情况也适用于传递到 std::thread
的 args
。
we're deleting our own handle to the std::thread at the end of the scope
std::thread
对象不会包含仿函数。它将需要存储在动态内存中。执行线程的生命周期与 std::thread 包装器的生命周期是分开的。
关于c++ - 分离线程是否使其捕获的shared_ptr保持事件状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67928979/