Implementing .dup / clone for class hierarchies

guslay guslay at gmail.com
Sun Dec 16 15:04:45 PST 2007


Bill Baxter Wrote:

> ..
> 
> The first thread is more about automatic shallow copying and Burton 
> Radons came up with this compiler-specific hack:
> """
>       private extern (C) Object _d_newclass (ClassInfo info);
> 
>       Object shallow_copy (Object value)
>       {
>           if (value is null)
>               return null;
> 
>           void *copy = _d_newclass (value.classinfo);
>           size_t size = value.classinfo.init.length;
> 
>           copy [8 .. size] = (cast (void *) value) [8 .. size];
>           return cast (Object) copy;
>       }
> 
> Better to start at that offset to avoid copying the synchronisation
> handle over, plus it's pointless work.
> """
> 
> That makes me shudder.  But it wouldn't be fine if it were implemented 
> as part of object.d.  I think that functionality would actually be very 
> useful to have as member of ClassInfo.  Then a base class .dup function 
> could shallow copy everything first so that derived .dups that only add 
> value members wouldn't need to do anything.
> 
> --bb


I think .NET as something similar with MemberwiseClone() [protected]

http://www.go-mono.com/docs/index.aspx?link=M%3ASystem.Object.MemberwiseClone()



More information about the Digitalmars-d-learn mailing list