The one thing that is different concerning implementing the C++ singleton design pattern for UObjects is that UObject classes are garbage collected, so you must maintain a reference to the instance of the singleton, or it will be automatically garbage collected and deleted. Other than that, the code would be the same as for any other C++ class.
To avoid having your singleton object garbage collected, you can maintain a reference in a few different ways. You can store a pointer to it in a globally accessible place like GameMode or GameState. Alternatively you could call the AddToRoot() function on your singleton object after you create it, and this will add it to the root set (objects in the root set are never garbage collected). Note that the pointer to the singleton object inside your singleton UObject class definition must be a UProperty for the garbage collection system to know about it.