119 votes

Conditions pour la génération automatique de défaut ctor, copie ctor, et de l'affectation par défaut de l'opérateur?

Je veux me rafraîchir la mémoire sur les conditions dans lesquelles un compilateur généralement auto génère un dflt ctor, copie ctor et de l'affectation de l'op.

Je semble me rappeler certaines règles, mais je n'ai pas l'oublier, et aussi ne peut pas trouver une bonne réputation de ressources en ligne. quelqu'un peut-il aider?

127voto

Philipp Points 21479

Dans la suite, "auto-généré" signifie "implicitement déclarée en défaut, mais pas définie comme étant supprimés". Il y a des situations où le membre de fonctions sont déclarées, mais défini comme étant supprimés.

  • Le constructeur par défaut est auto-généré si aucun utilisateur n'est déclaré par le constructeur (§12.1/5).
  • Le constructeur de copie est auto-généré si aucun utilisateur n'est déclaré constructeur de déplacement ou de déplacer l'opérateur d'affectation (car il n'y a pas de déplacer des constructeurs ou des opérateurs d'assignation de déplacement en C++03, cela simplifie pour "toujours", en C++03) (§12.8/8).
  • L'opérateur d'assignation de copie est auto-généré si aucun utilisateur n'est déclaré constructeur de déplacement ou de déplacer l'opérateur d'affectation (§12.8/19).
  • Le destructeur est auto-généré si aucun utilisateur n'est déclaré destructeur (§12.4/4).

C++0x seulement:

  • Le constructeur de déplacement est auto-généré si aucun utilisateur n'est déclaré constructeur de copie, copie opérateur d'affectation ou destructeur, et si l'généré constructeur de déplacement est valable (par exemple si il ne serait pas nécessaire d'attribuer constante de membres) (§12.8/10).
  • L'opérateur d'assignation de déplacement est auto-généré si aucun utilisateur n'est déclaré constructeur de copie, copie opérateur d'affectation ou destructeur, et si l'généré déplacer opérateur d'affectation est valable (par exemple si il ne serait pas nécessaire d'attribuer constante de membres) (§12.8/21).

-2voto

Mahesh Points 20994

En supposant que ni les constructeurs sont fournis en class foo -

foo obj1; // Uses default constructor
foo obj2 = obj1 ; // Uses default copy constructor
foo obj3;
obj3 = obj1;  // Uses default copy assignment operator function

Aussi rappelez-vous la Règle de Trois

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X