Svaki puta kada definiramo novi tip tada eksplicitno ili implicitno definiramo njegovo
ponašanje prilikom kopiranja, pridruživanja i pri destrukciji. To činimo
definiranjem sljedećih članova klase:
-
konstruktor kopiranjem (copy-constructor),
-
konstruktor premještanjem (move-constructor, C++11),
-
operator pridruživanja kopiranjem (copy-assignment operator),
-
operator pridruživanja premještanjem (move-assignment operator, C++11),
-
destruktor.
Konstruktor kopiranjem (CCtor) je konstruktor koji uzima jedan parametar tipa (konstantna)
referenca na tip klase (u kojoj se CCtor nalazi). Koristi se eksplicitno kada se objekt konstruira i inicijalizira
objektom istog tipa, te implicitno kod prijenosa parametara funkciji i u return naredbi.
Konstruktor premještanjem (MCtor) djeluje u istim situacijama kao i CCtor, ali samo na desnim vrijednostima.
Operator pridruživanja kopiranjem (OP-C) objektu s lijeve strane znaka jednakosti
pridružuje vrijednost objekta s desne strane kopiranjem. Objekt na desnoj strani ostaje netaknut.
Operator pridruživanja premještanjem (OP-P) objektu s lijeve strane znaka jednakosti
pridružuje vrijednost objekta s desne strane. Objekt na desnoj strani predaje svoje resurse
objektu na lijevoj strani i ostaje dobar samo za destrukciju.
Destruktor se poziva automatski kada objekt izlazi iz dosega ili kad se dinamički
alociran objekt briše iz memorije pomoću delete.
Budući da objekt bilo kojeg tipa mora imati mogućnost kopiranja prevodilac će
sintetizirati neke elemente kontrole kopiranja (CCtor, MCtor, OP-C, OP-M i destruktor) ako ih sami ne definiramo.