c++ - 线程在删除后访问本地对象,C++
问题描述
在这里需要你的帮助,
int main()
{
std::unique_ptr<int> p(std::make_unique<int>(50));
auto func = [](std::unique_ptr<int>& ptr)
{
std::this_thread::sleep_for(std::chrono::seconds(5));
std::cout << *ptr << std::endl;
};
std::thread t(func,std::ref(p));
t.detach();
}
我故意等待 5 秒(尽管 0,1 秒也足够了),以便在main()
返回后删除 p。
并且main()
返回后线程无法访问本地对象,因为它被破坏了对吗?
但在这种情况下,我有以下输出:
Press any key to continue... 50
谁能解释为什么线程可以读取已删除的指针?
解决方案
推荐阅读
- docker - Kubernetes:为 docker 提供参数
- mysql - SQL 分组列
- python - 如何提取不在标签内的2个不同的封闭html标签之间的文本?
- javascript - 禁用按钮,在另一个按钮时钟后启用按钮
- c - 静态变量的地址是否可以被其他文件访问
- java - 如何在 spring-boot 中生成 client-id 和 client-secret 并存储在数据库中?
- java - 尝试通过一些修改来实现合并排序
- python - 当字典中有多个列的函数列表时,重新采样“ohlc”聚合失败
- javascript - 检查服务器发送到前端的数据
- plugins - Shopware : 如何根据订单数量为客户设置免费礼物?