It's not obvious to me that this is safe.  Are we guaranteed that the character string returned from GetUUID() is going to hang around?  Perhaps it's safer to std::string this?

Also, do we receive these callback from the same thread(s) that deletes the object (i.e. does the set need guarding in any way?)