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
435 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!

sumber:php.cn
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