Should this always work?
frame
frame86 at live.com
Sat May 1 17:10:24 UTC 2021
On Saturday, 1 May 2021 at 15:52:52 UTC, Mike Parker wrote:
> No instance is being created by the cast. The instance already
> exists. The cast just allows you to treat the pointer to the
> instance as a specific type. It’s no different than casting
> from C to A really. You just have the void* as an intermediary.
Yes, I know. In fact, this was a stupid question. Not sure what I
was thinking off. I sometimes mix up languages in my head and
came to weird conclusions :P
On Saturday, 1 May 2021 at 16:06:05 UTC, Steven Schveighoffer
wrote:
> An interface cast involves a thunk (constant pointer
> adjustment) to get to the interface/object. The reason is
> because a class with interfaces stores interface vtable
> pointers inside the object, and your interface reference points
> at that. You can see when you cast between Object (concrete)
> type and Interface type, the pointer value changes.
>
> So this will not work. It *does* work for base classes, because
> the class vtable pointer is stored at same point, and casting
> around class references does not involve a thunk.
This was helpful to understand the ABI chapter better.
Thanks, guys!
More information about the Digitalmars-d-learn
mailing list