In un sistema in cui gli oggetti registrati devono avere nomi univoci, voglio utilizzare/includere questo puntatore dell'oggetto nel nome.
L'indirizzo di un oggetto non è necessariamente univoco. Esempio: si assegna dinamicamente un tale oggetto, lo si usa per un po ', lo si elimina e quindi si assegna un altro oggetto di questo tipo. L'oggetto appena assegnato potrebbe avere lo stesso indirizzo dell'oggetto del precedente.
Ci sono modi molto migliori per generare un nome univoco per qualcosa. Un contatore gensym, ad esempio:
// 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") {}
};
fonte
2011-10-21 14:44:38
convertirlo come stringa esadecimale che rappresenta l'indirizzo? –
Vedere la risposta a questa domanda: http://stackoverflow.com/questions/1255366/how-can-i-append-data-to-a-stdstring-in-hex-format – tenfour
suona come una cattiva idea: tu ' ri legando l'identità dell'oggetto con la sua posizione di memoria: cosa succede se provi a spostarlo in una versione futura della tua applicazione? Il tuo codice si romperà in modi molto spiacevoli. – akappa