Memory leak with dynamic array
Ellery Newcomer
ellery-newcomer at utulsa.edu
Sun Apr 11 19:40:52 PDT 2010
On 04/11/2010 09:36 PM, bearophile wrote:
>> But those list-like data structures probably can't be defined using the normal array literals :-)
>
> I was wrong, this is not so bad looking:
>
> struct List(T) {
> // Node of std.range.SListRange is not static!
> static struct Node {
> T data;
> Node* next;
> this(T d, Node* p=null) {
> data = d;
> next = p;
> }
> }
>
> Node* lh;
>
> this(T[] arr) {
> foreach_reverse (el; arr)
> lh = new Node(el, lh);
> }
> }
>
> void main() {
> List!int items = [1, 2, 3];
> }
>
> Bye,
> bearophile
It won't work for classes, though.
I'd think there'd be more trouble with other parts of the language
though, like slices. foreach with index is another thing I care about
particularly, but it should be trivial to implement. I can't recall what
else is still special-cased with array literals.
And I agree about integer literals. What would be nice is a way to
override how the literals are interpreted. Maybe some sort of macroish
facility that pattern matches and manipulates the AST at compile time...
<dreaming>
macro @(<Decl>: @(<Type> is X)
@(<Identifier>)
=
@(<IntegerLiteral>, lit), decl){
string str = "`" ~ lit.getText() ~ "`";
lit = @( str2X( $(<Exp>, str) ));
return decl;
}
Ick, that turned into a mess fast.
</dreaming>
More information about the Digitalmars-d-learn
mailing list