weird behave of Array?
FeepingCreature
feepingcreature at gmail.com
Mon Jul 29 07:02:42 UTC 2019
On Monday, 29 July 2019 at 05:58:21 UTC, dmm wrote:
> So, d try to be smart, only make thing worse?
D is behaving exactly as it should here. You simply have a wrong
model of what an array is in D.
In C++, an array owns its memory. In D, an array is a thin
wrapper around GC managed memory. As such, for instance, you can
take a reference to an array field, then resize the array, and
the original reference will still be valid and at its original
value.
To do what you want, use std.array.Appender, which owns its
memory.
import std.algorithm;
import std.array;
import std.range;
import std.stdio;
void main() {
Appender!(int[]) app;
10.iota.each!(a => app.put(a));
writefln!"%s, %s"(app.data.ptr, app.data);
app.shrinkTo(0);
10.iota.each!(a => app.put(a));
writefln!"%s, %s"(app.data.ptr, app.data);
}
More information about the Digitalmars-d-learn
mailing list