Pointers are more powerful than references in the sense that they allow two things that references don’t: nullability and rebinding.
Summary
References
cannot be null and cannot rebindstd::reference_wrapper
cannot be null but can rebindPointers
can be null and can rebind (and can do low-level address manipulations)boost optional references
can be null and can rebind (but are incompatible with std::optional)
https://www.fluentcpp.com/2018/10/02/pointers-references-optional-references-cpp/