Maison > Article > développement back-end > Pourquoi le passage d'un objet de classe par référence à std::thread déclenche-t-il toujours le constructeur de copie ?
std::thread Le passage par référence appelle le constructeur de copie
Problème :
Lors du passage un objet de classe Log dans un std::thread par référence, une erreur du compilateur se produit, malgré les attentes selon lesquelles le passage de référence devrait contourner le constructeur de copie. À l'inverse, passer l'objet par un pointeur résout le problème.
Explication :
La raison sous-jacente de ce comportement est que std::thread nécessite que ses arguments soient transmis par valeur. Passer par référence, comme dans Log &logger, a le même effet que passer un pointeur, c'est-à-dire qu'il nécessite toujours un constructeur de copie pour générer une copie de l'objet à transmettre au thread.
Solution :
Pour retrouver la sémantique de référence, sử dụng std::reference_wrapper:
std::thread newThread(session, &sock, std::ref(logger));
Remarque :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!