Quelle est la différence entre la cession de l'opérateur et le constructeur de copie?
Je ne comprends pas la différence entre la cession constructeur et le constructeur de copie en C++. Il est comme ça:
class A {
public:
A() {
cout << "A::A()" << endl;
}
};
//The copy constructor
A a = b;
//The assignment constructor
A c;
c = a;
//Is it right?
Je veux savoir comment allouer de la mémoire de la cession, le constructeur et le constructeur de copie?
- Avez-vous une bonne C++ livre?
- FAQ
Vous devez vous connecter pour publier un commentaire.
Un constructeur de copie est utilisé pour initialiser un précédemment initialisée objet de certaines autres données de l'objet.
Par exemple:
Un opérateur d'affectation est utilisé pour remplacer les données d'un précédemment initialisé objet avec un autre objet de données.
Par exemple:
Vous pourriez remplacer la copie de la construction par défaut la construction ainsi que l'affectation, mais qui serait moins efficace.
(Comme une note de côté: Mon implémentations ci-dessus sont exactement celles que le compilateur vous accorde gratuitement, de sorte qu'il ne serait pas beaucoup de sens pour les mettre en œuvre manuellement. Si vous avez un de ces deux, il est probable que vous êtes manuellement la gestion de certaines ressources. Dans ce cas, par La Règle de Trois, vous aurez très probablement aussi besoin de l'autre plus un destructeur.)
=default;
.= default
où un défaut ctor est nécessaire: il suffit de mettre en œuvre un vide corps par nous-mêmes, vaut un définis par l'utilisateur ctor et donc (sur un Standardese niveau) n'est pas trivial et disqualifie le type de classifications qui nécessitent un trivial ctor.:)
Allez-vous essayer à nouveau d'expliquer de quoi vous parlez?La différence entre le constructeur de copie et l'opérateur d'affectation provoque beaucoup de confusion pour les nouveaux programmeurs, mais il n'est vraiment pas si difficile. En résumant:
Exemple pour l'opérateur d'affectation:
Exemple pour le constructeur de copie:
La première est la copie de l'initialisation, la seconde est d'affectation. Il n'y a pas une telle chose comme la cession constructeur.
utilise le compilateur a généré constructeur de copie.
utilise le constructeur par défaut de construire
cc
, puis l' *opérateur d'affectation** (operator =
) sur un objet existant.IDK ce que tu veux dire par allouer de la mémoire dans ce cas, mais si vous voulez voir ce qui se passe, vous pouvez:
Je vous recommandons également de prendre un coup d'oeil à:
Pourquoi est-constructeur de copie appelée à la place de conversion constructeur?
Quelle est La Règle de Trois?
la différence entre un constructeur de copie et d'une affectation constructeur:
<classname> <o1>=<o2>
)<o1>=<o2>
).Et les fonctionnalités de base dans les deux sont les mêmes, ils vont copier les données à partir de o2 o1 membre par membre.
Ce que @Luchian Grigore Dit est mis en œuvre comme ce
SORTIE
constructeur par défaut
constructeur de copie
constructeur par défaut
opérateur d'affectation
Dans un des mots simples,
Constructeur de copie est appelé lorsqu'un nouvel objet est créé à partir d'un objet existant, comme une copie de l'objet existant.
Et l'opérateur d'affectation est appelé quand un objet est initialisé assigner une nouvelle valeur à partir d'un autre objet existant.
Exemple-
Je veux ajouter un point de plus sur ce sujet.
"La fonction opérateur de opérateur d'affectation doit être écrit que comme une fonction membre de la classe." Nous ne pouvons pas faire comme ami de la fonction contrairement à d'autres binaire ou opérateur unaire.
Quelque chose à ajouter au sujet de constructeur de copie:
Lors du passage d'un objet par valeur, il va utiliser le constructeur de copie
Lorsqu'un objet est retourné à partir d'une fonction par valeur, il va utiliser le constructeur de copie
Lors de l'initialisation d'un objet en utilisant les valeurs d'un autre objet(comme l'exemple que vous donnez).