【发布时间】:2026-02-12 07:15:02
【问题描述】:
我正在测试如下的 cpp 代码,并得到一个非常令人困惑的现象,下面的代码不打印“标签”字符串。谁能解释一下?非常感谢您的帮助!
class Data {
public:
Data() { std::cout << __FUNCTION__ << std::endl; }
~Data() { std::cout << __FUNCTION__ << std::endl; }
void show() { std::cout << label << std::endl; }
private:
std::string label{"label"};
};
int main() {
auto data = std::make_shared<Data>();
std::thread t([=]() mutable{
data->show();
});
t.detach();
}
【问题讨论】:
-
没有什么能阻止你的程序在线程有时间运行之前退出。
-
是的,我知道使用 join() 可以获得正确的结果,但我只是想了解如果使用 detach() 会发生什么,为什么没有输出了。
标签: c++ multithreading detach