嘗試將對物件(例如std::ostream)的引用傳遞給執行緒時函數,編譯可能會因為刪除的構造函數而失敗。出現此問題的原因是執行緒通常會複製其參數以避免引用別名問題。
要繞過編譯錯誤,必須使用 std::ref (或用於常數引用的 std::cref)。 std::ref 允許您使用值語義包裝引用,使您能夠安全地複製包裝器。
這裡,std::ref 包裝器提供了一個包含對 std 的引用的可複製物件: :cout。因此,線程可以成功複製它並正確執行該函數。
請記住,只有當引用的物件保持有效時,此程式碼才會起作用。確保物件的生命週期超過執行緒的執行持續時間至關重要。不遵守這一點可能會導致未定義的行為。
以上是為什麼將物件參考傳遞給執行緒會導致編譯錯誤,「std::ref」有何幫助?的詳細內容。更多資訊請關注PHP中文網其他相關文章!