On Monday, 21 October 2013 at 00:59:38 UTC, Jonathan M Davis
wrote:
On Sunday, October 20, 2013 09:33:36 Walter Bright wrote:
On 10/20/2013 7:25 AM, bearophile wrote:
> More discussions about variable-sized stack-allocated arrays
> in C++, it
> seems there is no yet a consensus:
>
> http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3810.pdf
>
> I'd like variable-sized stack-allocated arrays in D.
They're far more trouble than they're worth.
Just use:
auto a = new T[n];
Stack allocated arrays are far more trouble than they're
worth. But what
about efficiency? Here's what I often do something along the
lines of:
T[10] tmp;
T[] a;
if (n <= 10)
a = tmp[0..n];
else
a = new T[n];
scope (exit) if (a != tmp) delete a;
The size of the static array is selected so the dynamic
allocation is almost
never necessary.
If that paradigm is frequent enough, it might be worth wrapping
it in a
struct. Then, you'd probably get something like
StaticArray!(int, 10) tmp(n);
int[] a = tmp[];
which used T[10] if n was 10 or less and allocated T[]
otherwise. The
destructor could then deal with freeing the memory.
- Jonathan M Davis
Well that's the approach taken by std::array (C++11), if I am not
mistaken.
--
Paulo