Tutto giusto, solo un appunto: ok per prova usare new in quel modo, ma ricordati che in ogni programma vero ad ogni new deve corrispondere un delete, e, poiché in generale non è uso ri-ricavare da un reference un puntatore per rilasciare la memoria ad esso associata, in genere non restituirai mai tramite reference memoria allocata con new che non viene deallocata automaticamente altrove.
Per dirla in maniera più semplice: si assume che il chiamante non si debba preoccupare della deallocazione di ciò che restituisci tramite reference. Questo in pratica significa che, in genere, quando si restituiscono reference, si fa riferimento ad oggetti globali o a dati di un oggetto che vengono automaticamente deallocati al momento della distruzione dell'istanza in questione.