Meine Meinung dazu: Zeiger und Referenzen machen prinzipiell das selbe, dass die Syntax ein wenig anders ist, sollte einen nicht mehr stören, wenn man ein wenig C++ Erfahrung hat.
Referenzen benutze ich immer dann, wenn ich einen gescheiten Initialisierungswert habe, und die Referenz sich nie ändern soll, also immer dann, wenn es möglich ist. Größere Objekte kann man beispielsweise wunderbar per konstante Referenz übergeben, so ist es ein wenig schneller und man muss sich nicht sorgen, versehentlich das Objekt zu manipulieren. Aber wir achten ja alle sowieso auf const-correctness, nicht wahr?
Man hört manchmal, Referenzen seien sicherer, aber bis auf die Tatsache, dass man das Initialisieren nicht vergessen kann (und das kriegt man im Debugger eigentlich immer sehr schnell raus), bringen sie keine weiteren Sicherheiten, man kann ein Objekt löschen, egal ob eine Referenz darauf existiert oder nicht. Für sowas kann man sich smartpointer anschauen, aber meiner Meinung nach ist es immer gut, selber genau zu wissen, wann welches Objekt gelöscht wird; denn nur weil keine Zugriffsverletzung auftritt, heißt es noch lange nicht, dass ein Programm fehlerfrei weiter läuft.
Also: Wenn es geht, Referenzen benutzen, wenn es nicht geht, sind Pointer auch nicht wirklich schlimmer.