Meer referenties

Om je nog een beetje meer duidelijkheid te geven over referenties zal ik hier nog een ander voordeel van referenties geven. Stel je hebt het volgende programma geschreven.

include <iostream.h>

class auto
{
  auto(){cout << "constructor \n";} //constructor
  auto(auto&); 	 			  		//copy constructor
  ~auto(){cout << "destructor \n";} //destructor
}

auto::auto(auto& rhs)
{
  cout << "copy constructor" \n";
}

auto functie(auto eenauto)
{
  return eenauto;
}

auto reffunctie(auto &eenauto)
{
  return eenauto;
} 
  
int main()
{
  auto mercedes;
  
  functie(mercedes);
  reffunctie(mercedes);
  
  return 0;
}
Uitvoer:
constructor
copy constructor
copy constructor
destructor
destructor
destructor

Het eerste en belangrijkste dat opvalt in dit voorbeeld is dat er een copy constructor bij is gekomen bij de class auto. Het is namelijk zo dat als je iets doorgeeft aan een functie dit object wordt gecopieerd en dus elke keer de copy constructor wordt opgeroepen. Het nadeel hiervan is dat dit geheugen verbruikt wat voorkomen kan worden met referenties of pointers.

We beginnen weer bij de main functie waar een mercedes klasse wordt gemaakt waardoor de constructor wordt opgeroepen. Als we nu deze klasse nu doorgeven aan een functie wordt er een copy van gemaakt waardoor de copy constructor wordt opgeroepen. Als de functie af is gelopen wordt de copy constructor nog een keer opgeroepen waarna dus 2 keer de destructor opgeroepen moet worden. Je ziet dus dat er 2 copieŽn in het geheugen komen te staan wat de prestatie van het programma erg omlaag kan brengen. De volgende functie "reffunctie" ontvangt de mercedes echter als referentie wat er voor zorgt dat de copy constructor niet opgeroepen wordt waardoor geheugenruimte bespaard blijft. Als laatste zal dan de destructor nog 1 keer opgeroepen moeten worden en wordt het programma afgesloten.

Pointers of referenties

Dit kunnen we natuurlijk ook weer doen met pointers maar ik denk dat je het idee wel snapt dus ik laat het hier bij. Het probleem is nu natuurlijk waarom je niet altijd referenties gebruikt en dat is heel simpel, referenties kun je later niet meer aan andere objecten toekennen en pointers wel. Een nadeel van pointers is echter dat deze null kunnen zijn wat fouten geeft, referenties daarentegen kunnen nooit null zijn.

Succes

Vampire,