question about the implementation of Variant
aki via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sun Jan 3 23:30:50 PST 2016
Following function will return the reference to a object Foo
embedded in a Variant.
class Foo {}
Variant fun() {
Variant v;
v = new Foo();
return v;
}
According to the source code of VariantN.opAssign,
the assignment is done by:
memcpy(&store, &rhs, rhs.sizeof);
fptr = &handler!(T);
where rhs is new Foo(), store is embedded storage in Variant,
and fptr is accessor function also work as data tag.
Very efficient implementation.
But wait, how does GC detect there still be a live reference to
the object Foo?
Because store is just a fix sized array of bytes.
ubyte[size] store;
GC cannot be aware of the reference, right?
Thanks, aki
More information about the Digitalmars-d-learn
mailing list