Typically, I use references for their non-nullability over pointers. However, I've run into issues with wanting to store references in vectors, or wanting a non-null field in an object that can be reassigned, except since references aren't re-assignable, I have to use pointers instead.
Why is this a feature of references? I can't see what benefits this brings, and there are plenty of cases where I just want a non-null pointer with no other baggage. Is there some ambiguous case or some compiler limitations that justifies why the language is like this?