Array Appending Plus Postblits

Max Samukha spambox at d-coding.com
Wed Nov 24 01:51:44 PST 2010


On 11/24/2010 07:06 AM, Jonathan M Davis wrote:
> On Tuesday 23 November 2010 20:43:34 dsimcha wrote:
>> I was browsing through druntime's lifetime.d for an unrelated reason and I
>> noticed that, when an array is copied for the purpose of appending to it,
>> the postblits are not called on the new array if it is an array of
>> structs.  Is there something I'm missing, or is this a bug that somehow
>> noone has noticed up to this point?
>
> Well, if it's copied for the purpose of appending, the elements need to be
> moved, not copied, don't they? And if they're moved, there's no need to call the
> postblit constructor.

The appended elements would need to be postblitted. Also, the original 
elements would need to be postblitted in case the append triggers a 
reallocation. They cannot be simply moved because there may be slices 
pointing to the original array.

Anyway, in the general case we cannot store structs with dtors/postblits 
in dynamic arrays (append requires GC and GC cannot destroy structs), 
which means you will have to use a special container for that purpose.

>
> - Jonathan M Davis



More information about the Digitalmars-d mailing list