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.