Je comprends que le code suivant ne compile pas puisque le constructeur de déplacement de A est supprimé car le mutex n'est pas mobile.Insertion d'un objet ayant un champ non-copiable dans un vecteur std ::
class A {
public:
A(int i) {}
private:
std::mutex m;
};
int main() {
std::vector<A> v;
v.emplace_back(2);
}
Mais si je veux que mon A
à stocker dans un récipient std comment dois-je aller à ce sujet? Je vais bien avec A
étant construit "à l'intérieur" du conteneur.
Un objet qui n'est pas copiable ou déplaçable ne peut simplement pas être dans un 'std :: vector'. Pensez-y: si le vecteur est redimensionné et doit être réaffecté, ses éléments doivent être copiés ou déplacés. Un conteneur qui fonctionne est 'std :: list'. – zindorsky
http://stackoverflow.com/a/29988626/560648 peut être d'un certain intérêt –
Je suis confus pourquoi je peux utiliser l'opérateur d'index dans un std :: carte sans problème: class A { public: void foo() {}; privé: std :: mutex m; }; int main() { std :: carte m; m [0] .foo(); } –
user695652