Što je konstruktor kopiranja?

Konstruktor kopiranja je posebna funkcija u C++-u i drugim jezicima pod utjecajem C++-a, koja kopira objekt kodiranja. Programer to čini dodavanjem deklaracije konstruktora kopiranja i upućivanjem na objekt. Prvenstveno, ovo koristi programeru uštedom vremena, ali također osigurava da programer ne unese pogrešno kodiranje objekta. Kada je kopija napravljena, mora imati drugačiji memorijski pokazivač ili će pokazivati ​​na isti dio na koji pokazuje izvorni objekt. Jedan od glavnih nedostataka korištenja konstruktora kopiranja je taj što ne mogu funkcionirati neovisno; ako se originalni objekt izbriše, bit će i kopija.

Kada programer koristi konstruktor kopiranja, on ili ona govori kodu da kopira objekt koji je već naveden u kodu. Da bi to učinio, programer prvo mora upotrijebiti deklaraciju da kaže kodiranju da izvrši funkciju kopiranja. Programer također mora referencirati drugi objekt, tako da objekt mora već biti izgrađen ili neće biti načina da se izvrši kopiranje.

Glavna prednost korištenja konstruktora kopiranja je da štedi vrijeme. Umjesto ponovnog upisivanja istih funkcija i kodiranja, programer može samo dodati referencu i objekt će biti spreman. Ovo ima još jednu skrivenu prednost u dosljednom i točnom kodiranju. Sve dok je izvorni objekt ispravno kodiran, kopirani objekt također će imati ispravno kodiranje. Obje ove prednosti su najočitije kod složenih objekata, ali programeri također mogu imati koristi od kopiranja jednostavnih objekata.

U jezicima C++ mnoge funkcije zahtijevaju memorijski pokazivač. To funkciji točno govori gdje u memoriji treba tražiti određene informacije ili gdje može pohraniti podatke. Programer mora specificirati novi memorijski pokazivač kada se koristi konstruktor kopiranja; inače će dva objekta koristiti isti memorijski prostor. Na površini, to možda ne izgleda loše, ali može dovesti do nedosljednosti. Na primjer, ako oba objekta dijele isti pokazivač i jedan objekt se koristi za podnošenje zahtjeva za kredit, dok se kopirani objekt koristi za podnošenje zahtjeva za kreditnu karticu, tada će se svi zahtjevi za kreditne kartice pohraniti s zahtjevima za kredit.

Programeri moraju biti oprezni prilikom brisanja objekta, jer objekti konstruktora kopiranja ne mogu funkcionirati neovisno. Ako programer izbriše izvorni objekt, tada kopirani objekt neće imati ništa za referencu. Bez koda za referencu, kopirani objekt neće moći izvršiti svoj zadatak i postat će beskorisan.