Allocating a slice object
Steven Schveighoffer
schveiguy at yahoo.com
Thu Jul 4 06:37:57 PDT 2013
On Thu, 04 Jul 2013 08:02:13 -0400, monarch_dodra <monarchdodra at gmail.com>
wrote:
> This is a pretty stupid question, but how would you allocate an "int[]"
> on the heap? I'm not talking about the array, but the actual slice
> object. EG:
>
> int[]* pSlice = new int[];
> //Error: new can only create structs,
> //dynamic arrays or class objects, not int[]'s
>
> Is there a simple "idiomatic" way?
Not really. There was talk at one point of deprecating that version, so
you had to do new int[](5) instead of new int[5], and then using new
int[5] to mean new "fixed sized array of size 5 on the heap", and then new
int[] would mean new slice on the heap.
But I think there's a real lack of benefit to this, plus it would be
confusing to people familiar with other languages.
> I'm currently doing it by allocating a struct that wraps one:
>
> struct S{int[] a;}
> int[]* pSlice1 = cast(int[]*) new S;
> int[]* pSlice2 = &(new S).a;
>
> Note: This is also a neat way to allocate a static array on the heap.
>
> Anybody have some better way?
This should work:
int[] *pSlice = (new int[][1]).ptr;
-Steve
More information about the Digitalmars-d-learn
mailing list