En C 98, le compilateur pouvait créer automatiquement des constructeurs de copie et des opérateurs d'affectation de copie via une copie par membre. Ce processus s'est étendu au C 11 avec l'introduction de la sémantique des mouvements. Cependant, les règles de génération automatique des opérations de déplacement diffèrent de celles des opérations de copie.
La présentation ACCU 2014 de Howard Hinnant donne un aperçu concis de ces règles. Le tableau suivant résume les points clés :
</p> <table> <thead><tr> <th> </th> <th>Destructor</th> <th>Move Constructor</th> <th>Move Assignment Operator</th> </tr></thead> <tbody> <tr> <td>C 98/03</td> <td>No</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>C 11 (Defect Report 1492)</td> <td>Yes</td> <td>No</td> <td>No</td> </tr> <tr> <td>C 11 Final</td> <td>Yes</td> <td>Yes<sup>*</sup> </td> <td>Yes<sup>*</sup> </td> </tr> </tbody> </table> <p>
Oui : Généré automatiquement.
Non : Pas automatiquement généré.
*Mais seulement implicitement défini (non déclaré ou déclaré = par défaut). Les définitions explicites suppriment la génération.
Ces règles indiquent que même si les constructeurs de déplacement et les opérateurs d'affectation de déplacement sont généralement générés automatiquement en C 11, il existe certains cas où ils peuvent ne pas l'être. Par exemple, si le destructeur est explicitement défini, les opérations de déplacement ne seront pas générées. De même, définir explicitement les opérations de déplacement elles-mêmes supprime la génération automatique.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!