.idup flawed?

Jason House jason.james.house at gmail.com
Sun Jun 24 11:12:20 PDT 2007


Walter Bright wrote:
> Xinok wrote:
>> .idup creates an invariant copy of an array. According to this page:
>> http://digitalmars.com/d/const.html
>>
>> "One is that constant data really is constant. It never changes. It's 
>> different enough that it needs a different name. In D, this kind of 
>> constant is called an invariant."
>>
>>
>> So if you have an invariant array, you expect that it's data will 
>> never change.
>>
>> This is not always the case if you have an array of classes. Classes 
>> are pointers, and when you use the .idup property, it only creates 
>> invariant copies of the pointers, and not the objects themselves. This 
>> means that the objects are still mutable and the data can change, 
>> which is not the intended behavior of invariant.
> 
> I think you might have found a fatal flaw in .idup. Aggh!

Has shallow and deep copies ever been discussed on this mailing list? 
One thing that has been bugging me lately is that .dup only does a 
shallow copy.  Making .idup do a deep copy could solve that problem.  My 
gut feeling is that more development on shallow vs. deep copy in D has 
been needed for a long time.



More information about the Digitalmars-d mailing list