J'ai une classe contenant un std::map<int, std::mutex>
et je ne suis pas en mesure de définir un constructeur de déplacement pour cela. std::mutex
n'est ni copiable ni déplaçable mais le constructeur de déplacement de std::map
fonctionne toujours car il ne nécessite pas que son type soit copiable ou déplaçable:
std::map<int, std::mutex> map1;
std::map<int, std::mutex> map2{std::move(map1)}; //this compiles without warnings
Mais alors j'ai une classe contenant une telle carte:
class OnlyMovable{
std::map<int, std::mutex> map;
public:
OnlyMovable(const OnlyMovable&& om) : map{std::move(om.map)} //somehow requires copy-ctor of mutex
{}
};
Ici, gcc me donne un énorme message d'erreur qui se termine par une plainte qui std::mutex
n'a pas de constructeur de copie.
Alors, où le constructeur de mouvement de cette classe appelle-t-il le constructeur de copie de std :: mutex et comment est-ce évitable?
PS: Je sais que cette classe n'a aucun sens mais c'est juste un simple exemple vérifiable dérivé de ma classe actuelle.
Votre constructeur de déplacement supposé prend une const
référence rvalue. om
ne peut pas être modifié, ce qui signifie que ses membres ne peuvent pas être déplacés. Laissez tomberconst
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras