On Fri, 02 Jul 2010 09:24:20 -0400, Heywood Floyd <soul...@gmail.com>
wrote:
Good day!
Consider
// - - - -
class Foo{}
auto one = new Foo();
auto two = new Foo();
writefln("one: %x two: %x", &one.classinfo, &two.classinfo);
// - - - -
For me this results in two identical memory addresses "every time".
Can I rely on this?
Can I design software based on the assumption that these addresses are
always the same?
(I'd like to be able to use the memory address as the key in an
associative array, for quick by-class
lookups.)
Use classinfo.name. The classinfo is the same memory address in the same
executable/dynamic library. If you open another D dynamic library, the
classinfo address for the same class may be different, but the name will
be the same.
Note that comparing classinfo.names will be just as fast as comparing
classinfo addresses if the names are at the same address (which will be
true if the classinfo is at the same address) because the string
comparison function short-circuits if the addresses are the same.
-Steve