Laatst was ik een binaire zoekboom aan het maken in C++. Zoals iedere boom begint met een wortel, begint mijn boom ook met een wortel.
struct element<T> *root;
Een pointer dus naar het root element. Nu had ik een add(T value) functie die een nieuwe element gaat toevoegen aan de boom. In die functie staat één regel namelijk.
addNode(root, value);
Nu had ik als volgt de definitie gemaakt voor de addNode functie.
void addNode(struct element<T> *branch, T value)
In de functie ga ik recursief de boom doorzoeken naar een plekje voor het nieuwe element en in die functie wijzig ik branch. Nu gaat dit niet zomaar dat wijzigen omdat ik eigenlijk het adres van de pointer meegeef. Dus ik gaf de pointer by-value door terwijl ik eigenlijk de pointer by-reference moest doorgeven. De compiler begon er al over te zagen maar op IRC zei een C++ guru dat dit by-reference moet doorgegeven worden als je dat wilt wijzigen. Dit ziet er als volgt uit.
void addNode(struct element<T> *&branch, T value)
Een alternatief is gebruik maken van dubbele pointers (dat is iets wat Rob zekers zal bekoren)
void addNode(struct element<T> **branch, T value)
Pointers, het is me wat… ^^