
Some people don’t like pointers – and for that reason, I think, we have references in C++. But as a confirmed pointer person, I find references very hard going.
I had a piece of C++ code that did this:
PartialPage& DoubleTree::oldestPage() { PartialPage& pageToKill = pageTree.begin()->second); long timeToKill = pageTree.begin()->second.getTime(); map<long, PartialPage&>::iterator itOld; for (itOld = pageTree.begin(); itOld != pageTree.end(); itOld++) { if (itOld->second.getTime() < timeToKill) { timeToKill = itOld->second.getTime(); pageToKill = itOld->second; } } return pageToKill; }
This produced rubbish results – because re-assigning the reference didn’t make it refer to a new element of the map. Essentially you cannot mutate a reference in C++ at all.
Switching to pointers fixed the problem though.
PartialPage* DoubleTree::oldestPage() { PartialPage* pageToKill = &(pageTree.begin()->second); long timeToKill = pageTree.begin()->second.getTime(); map<long, PartialPage>::iterator itOld; for (itOld = pageTree.begin(); itOld != pageTree.end(); itOld++) { if (itOld->second.getTime() < timeToKill) { timeToKill = itOld->second.getTime(); pageToKill = &(itOld->second); } } return pageToKill; }