Osoitusoperaattori C++ - ohjelmointikielessä on merkitty '='-merkillä. Kuten muutkin C++:n operaattorit, se voi olla ylikuormitettu .
Kopiointitoiminto on erityinen määritystoiminto, jota käytetään saman luokan objektien osoittamiseen toisilleen. Se on yksi erikoisfunktion jäsenistä , ja kääntäjä luo sen automaattisesti, jos ohjelmoijalta ei ole nimenomaista ilmoitusta. Kääntäjän luoma koodi kopioi bittikohtaisesti.
Kopioinnin määritysoperaattori eroaa kopiointikonstruktorista siinä, että sen on siivottava tehtävän kohteen datajäsenet (ja käsiteltävä itsemäärittelyä oikein), kun taas kopiokonstruktori antaa arvoja alustamattomille datajäsenille. [1] Esimerkiksi:
My_Array ensin ; // alustus oletuskonstruktorilla My_Array second = first ; // alustus kopiokonstruktorilla second = first ; // määritys kopiointimääräystoiminnollaErikoistapauksena on huomioitava seuraava kopiointikonstruktorin alustusversio:
Oma_taulukko toinen = Oma_taulukko ();Tässä tapauksessa kääntäjä (esim. VC2013) suorittaa välittömästi ilman optimointivaihtoehtoja palautusarvon optimoinnin (RVO, paluuarvon optimointi) eikä kopiointikonstruktoria kutsuta.
Kohteiden syväkopioiden tekemisessä tulee huomioida myös poikkeusten käsittely . Yksi tapa välttää resurssien siirtovirhe on seuraava:
Kuitenkin, jos onnistunut vaihtomenetelmä on kaikkien jäsenten käytettävissä ja luokka toteuttaa kopiokonstruktorin ja -destruktorin ( kolmen säännön mukaan ), lyhin tapa toteuttaa kopiointitehtävä olisi [2] :
julkinen : void swap ( My_Array & other ) // swap jäsentoiminto (ei pitäisi epäonnistua!) { // vaihtaa kaikki jäsenet (ja alla olevat aliobjektit, jos mahdollista) muulla std :llä :: swap ( array , other . array ); std :: swap ( count , other . count ); } My_Array & operator = ( My_Array other ) // Huomaa: argumentti välitetään arvon mukaan! { // vaihda tämä toisella swapilla ( other ); // sopimuksen mukaan aina return *this return * this ; // muu tuhoutuu, vapauttaa muistia }Syy, miksi toiminto =palaa My_Array&sen sijaan , voidon yksinkertainen. On sallittua yhdistää tehtäviä, kuten:
jono_1 = jono_2 = jono_3 ; // taulukon_3 arvo on määritetty taulukolle 2 // sitten taulukon_2 arvo määritetään taulukolle_1