On 10/4/22 10:59, Riccardo M wrote:
> The inherent reason for `remove` to cancel previous capacity and
> requiring new allocations is exactly to prevent overwriting data that
> could be owned by something else?
Yes.
A related topic is how the "end slice" never loses that capacity:
void main() {
auto a = [ 1, 2 ];
auto b = a;
assert(a.capacity != 0);
assert(b.capacity != 0);
b.length--;
assert(b.capacity == 0);
assert(a.capacity != 0); // <-- Preserved
}
Aside: .capacity is an expensive operation that requires some levels of
table lookups in the druntime. A data structure would benefit a lot if
it kept its own capacity as a member variable.
Ali