J'avais déjà longuement parlé des coûteuses erreurs d'inattention liées à la move semantics lors du passage de paramètres, lorsque des objets qui paraissent parfaitement valides ne le sont plus. Je me suis fait avoir une fois de plus avant-hier. Ce n'est pas aussi terrible que la fois précédente, puisque mon test unitaire a très vite attrapé la faute, mais cela prouve qu'il est finalement assez difficile de ne pas se tromper.
J'ai donc commencé à implémenter l'idée initiale proposée par Yakk sur StackOverflow, et je nomme mes arguments abcMoved pour bien indiquer qu'il faut bien faire attention:
class Person { public: A(std::string nameMoved, std::string addressMoved): _name(std::move(nameMoved)), _address(std::move(addressMoved) { std::cout << _name << " " << _address << std::endl; } private: std::string _name; std::string _address; };
Avec cette manière de faire, un std::cout << nameMoved << std::endl devrait nous sauter au visage. J'essaie, et je vous en recause.
Aucun commentaire:
Enregistrer un commentaire