В системе, где зарегистрированные объекты должны иметь уникальные имена, я хочу использовать / включать указатель this в имени объекта.
Адрес объекта не обязательно является уникальным.Пример. Вы динамически выделяете такой объект, некоторое время используете его, удаляете, а затем выделяете другой такой объект.Этот вновь выделенный объект вполне может иметь тот же адрес объекта, что и предыдущий.
Существуют гораздо лучшие способы для генерации уникального имени для чего-либо.Счетчик Генсим, например:
// Base class for objects with a unique, autogenerated name.
class Named {
public:
Named() : unique_id(gensym()) {}
Named(const std::string & prefix) : unique_id(gensym(prefix)) {}
const std::string & get_unique_id () { return unique_id; }
private:
static std::string gensym (const std::string & prefix = "gensym");
const std::string unique_id;
};
inline std::string Named::gensym (const std::string & prefix) {
static std::map<std::string, int> counter_map;
int & entry = counter_map[prefix];
std::stringstream sstream;
sstream << prefix << std::setfill('0') << std::setw(7) << ++entry;
return sstream.str();
}
// Derived classes can have their own prefix. For example,
class DerivedNamed : public Named {
public:
DerivedNamed() : Named("Derived") {}
};