Quand le C++ a été créé, il a été décidé que le constructeur par défaut, constructeur par copie, l'affectation de l'opérateur et le destructeur serait généré automatiquement (à moins que prévu). Pourquoi ? Parce que les compilateurs C++ doit être capable de compiler (la plupart) du code C sémantique identique, et c'est combien de struct
de travail en C.
Cependant, plus tard, il fut remarqué que chaque fois qu'un utilisateur écrit une coutume destructeur, elle aura sans doute besoin d'écrire une copie personnalisée-constructeur/l'affectation opérateur de trop; ceci est connu comme la Règle des Trois Grands. Avec le recul, nous pouvons voir qu'il pourrait avoir été spécifié que le constructeur par copie/cession-opérateur/destructeur aurait été générée si aucun des 3 ont été fournis par l'utilisateur, et qu'il aurait aidé à attraper beaucoup de bugs... et encore conserver une compatibilité descendante avec C.
Par conséquent, comme le C++11 est venu autour, il a été décidé que cette fois, ce serait tout à fait à droite: le nouveau coup-constructeur et déplacez-cession-opérateur ne serait généré automatiquement s'il était clair que l'utilisateur n'a pas à faire quelque chose de "spécial" avec la classe. Rien de "spécial" étant défini comme la redéfinition de déplacer/copier/destruction de comportement.
Pour aider avec les cas étaient des gens serait de faire quelque chose de spécial, mais je voulais "généré automatiquement" méthodes spéciales, l' = default
de sucre-revêtement a été ajouté ainsi.
Malheureusement, pour des raisons de compatibilité descendante, le comité C++ ne peut pas revenir dans le temps et changer les règles de génération automatique de copie; je souhaite qu'ils avaient déconseillé à ouvrir la voie pour la prochaine version de la Norme, mais je doute qu'ils le feront. il est cependant déconseillé (voir §12.8/7 pour le constructeur de copie par exemple, avec l'aimable autorisation de @Nevin).