0

我最近了解到 std::thread 的这种不幸行为

    void func(std::string param);

    void evil()
    {
    char buff[4096];
    sprintf(buff,"%i",rand());
    std::thread t(func, buff);
    t.detach();
    }

(这里的问题是缓冲区到期和从 char* 到 std::string 的转换是在调用线程中完成的)解决方案是创建这样的线程:

std::thread t(func, std::string(buff));

但我的问题是 ISO 选择这种行为的原因是什么(尽管当你想到它仍然是许多错误的潜在来源时,这是完全合乎逻辑的......)。

4

0 回答 0