Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Melepasi Objek Kelas dengan Rujukan kepada std::thread Masih Mencetuskan Pembina Salin?

Mengapa Melepasi Objek Kelas dengan Rujukan kepada std::thread Masih Mencetuskan Pembina Salin?

Barbara Streisand
Barbara Streisandasal
2024-11-17 15:54:01375semak imbas

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

std::thread Melepasi Rujukan Menjemput Pembina Salin

Isu:

Apabila lulus objek kelas Log ke std::thread dengan rujukan, ralat pengkompil berlaku, walaupun jangkaan bahawa lulus rujukan harus memintas pembina salinan. Sebaliknya, menghantar objek melalui penuding menyelesaikan isu.

Penjelasan:

Sebab asas untuk tingkah laku ini ialah std::thread memerlukan hujahnya diluluskan oleh nilai. Melewati rujukan, seperti dalam Log &logger, mempunyai kesan yang sama seperti menghantar penunjuk, iaitu, ia masih memerlukan pembina salinan untuk menjana salinan objek untuk dihantar ke utas.

Penyelesaian:

Untuk mendapatkan semula semantik rujukan, sử dụng std::reference_wrapper:

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

Nota:

  1. Pastikan bahawa jangka hayat objek yang dirujuk (logger dalam kes ini) melebihi tempoh benang .
  2. Dalam kod yang disediakan, pembina salinan Log adalah peribadi, menghalang penciptaan tambahan salinan.

Atas ialah kandungan terperinci Mengapa Melepasi Objek Kelas dengan Rujukan kepada std::thread Masih Mencetuskan Pembina Salin?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn