Tildelingsoperatøren i programmeringssproget C++ er angivet med tegnet '='. Ligesom andre operatører i C++ kan den overbelastes med .
Kopieringstildelingsoperationen er en speciel slags tildelingsoperation, der bruges til at tildele objekter af samme klasse til hinanden. Det er et af de særlige funktionsmedlemmer og genereres automatisk af compileren , hvis der ikke er nogen eksplicit erklæring fra programmøren. Koden genereret af compileren kopierer bitvis.
Kopitildelingsoperatøren adskiller sig fra kopikonstruktøren ved, at den skal rydde op i datamedlemmerne for opgavens mål (og håndtere selvtildelingen korrekt), mens kopikonstruktøren tildeler værdier til ikke-initialiserede datamedlemmer. [1] For eksempel:
My_Array først ; // initialisering med standardkonstruktør My_Array second = first ; // initialisering med kopikonstruktør second = first ; // opgave ved kopi tildeling operationSom et særligt tilfælde skal følgende variant af initialisering af kopikonstruktøren bemærkes:
My_Array second = My_Array ();I dette tilfælde udfører compileren (f.eks. VC2013) med det samme, uden nogen optimeringsmuligheder, returværdioptimering (RVO, returværdioptimering), og kopikonstruktøren kaldes ikke.
Når det kommer til at lave dybe kopier af objekter, skal undtagelseshåndtering også tages i betragtning . En måde at undgå ressourceflytningsfejlen på er som følger:
Men hvis en vellykket udvekslingsmetode er tilgængelig for alle medlemmer, og klassen implementerer en kopikonstruktør og en destruktor (i henhold til regelen om tre ), vil den korteste måde at implementere en kopiopgave på være [2] :
offentligt : void swap ( My_Array & other ) // swap member funktion (bør ikke mislykkes!) { // swap alle medlemmer (og underliggende sub-objekter, hvis det er muligt) med andre std :: swap ( array , other . array ); std :: swap ( tælle , andet . tælle ); } My_Array & operator = ( My_Array other ) // Bemærk: argumentet sendes af værdi! { // swap dette med andet swap ( andet ); // returnerer efter konvention altid *this return * this ; // andet er ødelagt, frigør hukommelse }Grunden til at operationen =vender tilbage My_Array&i stedet for voider enkel. Det er tilladt at kombinere opgaver som:
matrix_1 = matrix_2 = matrix_3 ; // værdien af array_3 er tildelt til array_2 // derefter tildeles værdien af array_2 til array_1