Mis on koopiakonstruktor?

Kopeerimiskonstruktor on C++ ja teiste C++ mõjutatud keelte spetsiaalne funktsioon, mis kopeerib kodeerimisobjekti. Programmeerija teeb seda, lisades koopiakonstruktori deklaratsiooni ja viitades objektile. Eelkõige toob see kasu programmeerijale, säästes aega, kuid tagab ka selle, et programmeerija ei sisesta objekti kodeeringut valesti. Kui koopia tehakse, peab sellel olema erinev mälukursor või see osutab samale jaotisele, millele osutab algne objekt. Üks koopiakonstruktorite kasutamise peamisi puudusi on see, et need ei saa iseseisvalt töötada; kui algne objekt kustutatakse, siis kustutatakse ka koopia.

Kui programmeerija kasutab koopiakonstruktorit, käsib ta koodil kopeerida koodis juba loetletud objekt. Selleks peab programmeerija esmalt kasutama deklaratsiooni, et anda kodeeringule käsu kopeerimisfunktsiooni täitmiseks. Programmeerija peab viitama ka teisele objektile, nii et objekt peab olema juba ehitatud, vastasel juhul ei ole võimalik kopeerida.

Koopiakonstruktori kasutamise peamine eelis on aja kokkuhoid. Selle asemel, et samu funktsioone ja kodeerimist uuesti tippida, saab programmeerija lihtsalt lisada viite ja objekt on valmis. Sellel on veel üks varjatud eelis järjepidevas ja täpses kodeerimises. Kuni algne objekt on õigesti kodeeritud, on ka kopeeritud objektil õige kodeering. Mõlemad eelised ilmnevad kõige paremini keerukate objektide puhul, kuid programmeerijad saavad kasu ka lihtsate objektide kopeerimisest.

C++ keeltes vajavad paljud funktsioonid mälukursorit. See annab funktsioonile täpselt teada, kust mälust teatud teavet otsida või andmeid salvestada. Programmeerija peab määrama uue mälukursori, kui kasutatakse koopiakonstruktorit; vastasel juhul kasutavad kaks objekti sama mäluruumi. Pealtnäha ei pruugi see halb tunduda, kuid see võib põhjustada ebakõlasid. Näiteks kui mõlemal objektil on sama kursor ja ühte objekti kasutatakse laenutaotluste esitamiseks, samal ajal kui kopeeritud objekti krediitkaarditaotluste esitamiseks, siis salvestatakse kõik krediitkaarditaotlused koos laenutaotlustega.

Programmeerijad peavad olema objekti kustutamisel ettevaatlikud, kuna kopeerimiskonstruktori objektid ei saa iseseisvalt toimida. Kui programmeerija kustutab algse objekti, pole kopeeritud objektil millelegi viidata. Kui viitekoodi pole, ei saa kopeeritud objekt oma ülesannet täita ja muutub kasutuks.