Bonsoir !
J'ai créé une union, et j'ai maintenant besoin de définir un operator=(&&), voici la première chose qui m'est passée par la tête :
Sachant qu'à priori, ni le destructeur ni le constructeur par déplacement ne peuvent balancer d'exception (destruction/déplacement soit de std::string, soit de shared_ptr, soit de types primitifs).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 auto Parser::ParseResult::operator=(ParseResult&& other) -> ParseResult& { (*this).~ParseResult(); new (this) ParseResult(std::move(other)); return *this; }
Quelles critiques peut-on adresser à une telle implémentation ? D'une part dans ce cas précis, d'autre part dans un cas plus général ?
Si vous avez besoin d'un code plus complet, je peux éventuellement essayer d'extraire les parties pertinentes.
Merci d'avance pour vos réponses!
Partager