首頁 > 後端開發 > C++ > 主體

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

Barbara Streisand
發布: 2024-11-17 15:54:01
原創
373 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板