Kaj je konstruktor kopiranja?

Konstruktor kopiranja je posebna funkcija v C++ in drugih jezikih, na katere vpliva C++, ki kopira kodirni objekt. Programer to naredi tako, da doda izjavo konstruktorja kopiranja in se sklicuje na objekt. To predvsem koristi programerju s prihrankom časa, hkrati pa zagotavlja, da programer ne vnese napačno kodiranje predmeta. Ko je kopija narejena, mora imeti drugačen pomnilniški kazalec ali pa bo kazala na isti odsek, na katerega kaže izvirni predmet. Ena od glavnih pomanjkljivosti uporabe konstruktorjev kopiranja je, da ne morejo delovati neodvisno; če je izvirni predmet izbrisan, bo tudi kopija.

Ko programer uporablja konstruktor kopiranja, pove kodi, da kopira objekt, ki je že naveden v kodi. Da bi to naredil, mora programer najprej uporabiti deklaracijo, ki kodiranju sporoči, naj izvede funkcijo kopiranja. Programer se mora tudi sklicevati na drug objekt, zato mora biti objekt že zgrajen, sicer ne bo mogoče izvesti kopiranja.

Glavna prednost uporabe konstruktorja kopiranja je, da prihrani čas. Namesto da bi moral programer znova vnašati iste funkcije in kodirati, lahko samo doda referenco in objekt bo pripravljen. To ima še eno skrito prednost pri doslednem in natančnem kodiranju. Dokler je izvirni predmet pravilno kodiran, bo imel tudi kopirani predmet pravilno kodiranje. Obe prednosti sta najbolj očitni pri zapletenih predmetih, programerjem pa lahko koristi tudi kopiranje preprostih predmetov.

V jezikih C++ številne funkcije zahtevajo pomnilniški kazalec. To funkciji natančno pove, kje v pomnilniku iskati določene informacije ali kje lahko shrani podatke. Programer mora podati nov pomnilniški kazalec, ko se uporablja konstruktor kopiranja; v nasprotnem primeru bosta oba objekta uporabljala isti pomnilniški prostor. Na videz se to morda ne zdi slabo, vendar lahko vodi do nedoslednosti. Na primer, če imata oba predmeta isti kazalec in se en objekt uporablja za oddajo prošenj za posojilo, medtem ko se kopirani objekt uporablja za oddajo vlog za kreditno kartico, bodo vse vloge za kreditno kartico shranjene z vlogami za posojilo.

Programerji morajo biti previdni pri brisanju predmeta, ker objekti konstruktorja kopiranja ne morejo delovati neodvisno. Če programer izbriše izvirni objekt, potem kopirani predmet ne bo imel ničesar, na kar bi se lahko sklicevali. Brez kode za sklicevanje kopirani predmet ne bo mogel izvesti svoje naloge in bo postal neuporaben.