Vad är en kopieringskonstruktör?

En kopieringskonstruktor är en speciell funktion i C++, och andra språk som påverkas av C++, som kopierar ett kodningsobjekt. Programmeraren gör detta genom att lägga till copy constructor-deklarationen och hänvisa till ett objekt. I första hand gynnar detta programmeraren genom att spara tid, men det säkerställer också att programmeraren inte anger objektets kodning felaktigt. När kopian är gjord måste den ha en annan minnespekare, annars pekar den på samma sektion som originalobjektet pekar mot. En av de stora nackdelarna med att använda kopieringskonstruktörer är att de inte kan fungera oberoende; om originalobjektet raderas, kommer kopian att vara det också.

När en programmerare använder en kopieringskonstruktor, säger han eller hon till koden att kopiera ett objekt som redan finns med i koden. För att göra detta måste programmeraren först använda en deklaration för att tala om för kodningen att utföra kopieringsfunktionen. Programmeraren måste också referera till ett annat objekt, så objektet måste redan vara byggt, annars kommer det inte att finnas något sätt att utföra kopieringen.

Den största fördelen med att använda en kopieringskonstruktor är att det sparar tid. Istället för att behöva skriva om samma funktioner och koda igen, kan programmeraren bara lägga till en referens och objektet är klart. Detta har en annan dold fördel i konsekvent och korrekt kodning. Så länge det ursprungliga objektet är korrekt kodat kommer det kopierade objektet också att ha rätt kodning. Båda dessa fördelar är mest uppenbara med komplexa objekt, men programmerare kan också dra nytta av att kopiera enkla objekt.

I C++-språk kräver många funktioner en minnespekare. Detta talar om för funktionen exakt var den ska leta i minnet efter viss information, eller var den kan lagra data. Programmeraren måste ange en ny minnespekare när en kopieringskonstruktor används; annars kommer de två objekten att använda samma minnesutrymme. På ytan kanske detta inte verkar dåligt, men det kan leda till inkonsekvenser. Till exempel, om båda objekten delar samma pekare och ett objekt används för att skicka in låneansökningar medan det kopierade objektet görs för att skicka in kreditkortsansökningar, kommer alla kreditkortsansökningar att lagras med låneansökningarna.

Programmerare måste vara försiktiga med att radera ett objekt, eftersom kopieringskonstruktorobjekt inte kan fungera oberoende. Om programmeraren raderar originalobjektet har det kopierade objektet inget att referera till. Utan någon kod att referera till kommer det kopierade objektet inte att kunna utföra sin uppgift och kommer att bli värdelöst.