尝试将对对象(例如 std::ostream)的引用传递给线程时函数,编译可能会由于删除的构造函数而失败。出现此问题的原因是线程通常会复制其参数以避免引用别名问题。
要绕过编译错误,必须使用 std::ref (或用于常量引用的 std::cref)。 std::ref 允许您使用值语义包装引用,从而使您能够安全地复制包装器。
std::thread t(foo, std::ref(std::cout));
这里,std::ref 包装器提供了一个包含对 std 的引用的可复制对象: :cout。因此,线程可以成功复制它并正确执行该函数。
请记住,只有当引用的对象保持有效时,此代码才会起作用。确保对象的生命周期超过线程的执行持续时间至关重要。不遵守这一点可能会导致未定义的行为。
以上是为什么将对象引用传递给线程会导致编译错误,'std::ref”有何帮助?的详细内容。更多信息请关注PHP中文网其他相关文章!