首頁 >後端開發 >C++ >為什麼透過引用 std::thread 傳遞類別物件仍然會觸發複製建構子?

為什麼透過引用 std::thread 傳遞類別物件仍然會觸發複製建構子?

Barbara Streisand
Barbara Streisand原創
2024-11-17 15:54:01452瀏覽

Why Does Passing a Class Object by Reference to std::thread Still Trigger the Copy Constructor?

std::thread 以引用傳遞呼叫複製建構子

問題:

問題:

問題:

問題:

問題:
std::thread newThread(session, &sock, std::ref(logger));

問題:

  1. 問題:
問題:問時類Log 的物件透過引用傳遞到std::thread 時,會發生編譯器錯誤,儘管預期引用傳遞應繞過複製建構子。相反,透過指標傳遞物件可以解決問題。 說明:此行為的根本原因是 std::thread 需要以下方式傳遞其參數值。透過引用傳遞,如 Log &logger 中所示,與傳遞指標具有相同的效果,即它仍然需要複製建構函式來產生要傳遞給執行緒的物件的副本。 解決方案:要重新獲得引用語義,請使用std::reference_wrapper:注意:確保引用物件(本例中為logger)的生命週期超過執行緒的生命週期。 在提供的程式碼中,Log 的複製建構函式是私有的,防止建立額外的副本。

以上是為什麼透過引用 std::thread 傳遞類別物件仍然會觸發複製建構子?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn