Je suis nouveau pour déplacer constructeur et assez confus avec le comportement VS2010. Je dessine un constructeur de déplacement (classe A) qui ma connaissance est comme ceci:Déplacer constructeur, constructeur de copie non-const, emplace de la liste dans VS2010
A(A&& input) {some code}
Lorsque j'utilise la emplace de liste et mettre une instance de la classe A:
mylist.emplace(a);
Mon constructeur de déplacement est pas appelé, et un constructeur de copie non-const est appelée à la place:
A(A& input) {the same code as move constructor}
d'autre part quand je fais ceci:
mylist.emplace(A(2));
Mon constructeur de déplacement est appelé comme il le devait. Donc, ma question est:
- Pourquoi est-ce que l'emplace de liste appelle mon constructeur de copie non-const au lieu de mon constructeur de déplacement?
- Est-ce que le constructeur de copie non const est en fait une autre façon de définir un constructeur de déplacement?
- Ce comportement est-il correct (pour un compilateur C++ 0x) ou simplement le comportement de VS2010?
Merci d'avance à un groupe.
Si votre constructeur de copie a le même comportement que votre constructeur de mouvement, la classe n'est-elle pas sérieusement endommagée? – UncleBens
@UncleBens: Pas nécessairement, les deux peuvent faire une copie. – ybungalobill
@ybungalobill: Dans un tel cas, pourquoi définir (plutôt que peut-être désactiver) le constructeur de déplacement? Et si le constructeur de copie fait une copie, pourquoi devrait-il prendre une référence non-const? – UncleBens