Operátor přiřazení v programovacím jazyce C++ je označen znakem '='. Stejně jako ostatní operátory v C++ může být přetížen .
Operace přiřazení kopírování je speciální druh operace přiřazení, která se používá k vzájemnému přiřazení objektů stejné třídy. Je to jeden ze členů speciální funkce a je automaticky generován kompilátorem , pokud programátor výslovně nedeklaruje. Kód vygenerovaný kompilátorem provede bitovou kopii.
Operátor přiřazení kopírování se liší od konstruktoru kopírování v tom, že musí vyčistit datové členy cíle přiřazení (a správně zpracovat samopřiřazení), zatímco konstruktor kopírování přiřazuje hodnoty neinicializovaným datovým členům. [1] Například:
Moje_pole první ; // inicializace výchozím konstruktorem My_Array second = first ; // inicializace pomocí kopírovacího konstruktoru second = first ; // přiřazení operací přiřazení kopírováníJako zvláštní případ je třeba poznamenat následující variantu inicializace pomocí konstruktoru kopírování:
My_Array second = My_Array ();V tomto případě kompilátor (například VC2013) okamžitě, bez jakýchkoli optimalizačních možností, provede optimalizaci návratové hodnoty (RVO, optimalizace návratové hodnoty) a konstruktor kopírování není volán.
Pokud jde o vytváření hlubokých kopií objektů, je třeba vzít v úvahu také zpracování výjimek . Jeden způsob, jak se vyhnout chybě přesunu prostředku, je následující:
Pokud je však všem členům k dispozici úspěšná metoda výměny a třída implementuje konstruktor kopírování a destruktor (podle pravidla tří ), nejkratší způsob, jak implementovat přiřazení kopie, by byl [2] :
veřejnost : void swap ( My_Array & other ) // swap členskou funkci (nemělo by selhat!) { // zamění všechny členy (a pokud je to možné i podřízené dílčí objekty) s jinými std :: swap ( array , other . array ); std :: swap ( count , other . count ); } My_Array & operator = ( My_Array other ) // Poznámka: argument je předán hodnotou! { // swap to s other swap ( other ); // podle konvence vždy return *this return * this ; // jiné je zničeno, uvolňuje paměť }Důvod, proč se operace =vrací My_Array&místo voidje jednoduchý. Je povoleno kombinovat úkoly, jako jsou:
pole_1 = pole_2 = pole_3 ; // hodnota pole_3 je přiřazena poli_2 // hodnota pole_2 je přiřazena poli_1