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