operator=(&&) à coup de placement new/delete ?
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 :
Code:
1 2 3 4 5 6
| auto Parser::ParseResult::operator=(ParseResult&& other) -> ParseResult&
{
(*this).~ParseResult();
new (this) ParseResult(std::move(other));
return *this;
} |
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).
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 :) !