Arrays and non-copyable elements

Stanislav Blinov stanislav.blinov at gmail.com
Mon Jun 8 02:07:16 UTC 2020


On Monday, 8 June 2020 at 00:31:10 UTC, Steven Schveighoffer 
wrote:

> This is a bug, please file. What is likely happening is that 
> the template is not moving the data to the underlying C call.
>
> -Steve

That is not a bug, it's a shortcoming of garbage-collected 
arrays. D arrays are not equipped to deal with non-copyable 
values. The ~= has to expect to copy contents of arr, since at 
runtime there may be multiple references to it, i.e:

auto storage = [NonCopyable(a), /* .... */];
auto arr = storage[1 .. 3];

arr ~= NonCopyable(n);

This would need to allocate a new array and copy contents of 
storage[1 .. 3] into it.


More information about the Digitalmars-d-learn mailing list