std::thread 以引用傳遞呼叫複製建構子
問題:
問題:
問題:
問題:
問題:
std::thread newThread(session, &sock, std::ref(logger));
登入後複製
問題:
- 問題:
-
問題:問時類Log 的物件透過引用傳遞到std::thread 時,會發生編譯器錯誤,儘管預期引用傳遞應繞過複製建構子。相反,透過指標傳遞物件可以解決問題。 說明:此行為的根本原因是 std::thread 需要以下方式傳遞其參數值。透過引用傳遞,如 Log &logger 中所示,與傳遞指標具有相同的效果,即它仍然需要複製建構函式來產生要傳遞給執行緒的物件的副本。 解決方案:要重新獲得引用語義,請使用std::reference_wrapper:注意:確保引用物件(本例中為logger)的生命週期超過執行緒的生命週期。 在提供的程式碼中,Log 的複製建構函式是私有的,防止建立額外的副本。
以上是為什麼透過引用 std::thread 傳遞類別物件仍然會觸發複製建構子?的詳細內容。更多資訊請關注PHP中文網其他相關文章!