Rumah > pembangunan bahagian belakang > C++ > 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
Lepaskan: 2024-11-17 15:54:01
asal
455 orang telah melayarinya

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));
Salin selepas log masuk

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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan