On Monday, 14 September 2020 at 16:44:14 UTC, Adam D. Ruppe wrote:

This is a common mistake with people coming from C++. A D class is more like a Java class - it is automatically a reference.

So your class Bob here in D would actually be represented as `Bob*` in C++.

Thus when you define `Bob*` in D, that's like a `Bob**` in C++... a pointer to a pointer. Thus you're getting the address on the stack of the local, not at all what you want.

Your factory should really just be:

Bob bobFactory() { return new Bob; }

Then to compare addresses, do:

writeln(cast(void*) bob); // convert the reference itself to a pointer

thank you! I was driving myself mad.
makes sense now.

Reply via email to