Lors de la tentative de transmission d'une référence à un objet, tel qu'un std::ostream, à un thread fonction, la compilation peut échouer en raison d'un constructeur supprimé. Ce problème survient car les threads copient généralement leurs arguments pour éviter les problèmes d'alias référentiel.
Pour contourner l'erreur de compilation, il est essentiel d'utiliser std::ref (ou std::cref pour les références constantes). std::ref vous permet d'envelopper une référence avec une sémantique de valeur, vous permettant de copier le wrapper en toute sécurité.
std::thread t(foo, std::ref(std::cout));
Ici, le wrapper std::ref fournit un objet copiable qui contient la référence à std : :cout. Par conséquent, le thread peut le copier avec succès et exécuter la fonction correctement.
N'oubliez pas que ce code ne fonctionnera que tant que l'objet référencé reste valide. Il est crucial de s'assurer que la durée de vie de l'objet dépasse la durée d'exécution du thread. Le non-respect de cela peut entraîner un comportement indéfini.
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!