首页 > 解决方案 > 线程在删除后访问本地对象,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

谁能解释为什么线程可以读取已删除的指针?

标签: c++multithreadingunique-ptrlifetime

解决方案


推荐阅读