On Thursday, 28 November 2013 at 17:12:01 UTC, Denis Shelomovskij
wrote:
27.11.2013 3:33, Namespace пишет:
First of all: I apologize for my bad english.
In the last few weeks I searched for a way to allocate nicely
temporary
buffer of unknown lengths.
You can use `unstd.memory.allocation.tempAlloc` [1]. Also there
is `unstd.c.string.tempCString` [2] for common case of
temporary C strings.
[1]
http://denis-sh.bitbucket.org/unstandard/unstd.memory.allocation.html#tempAlloc
[2]
http://denis-sh.bitbucket.org/unstandard/unstd.c.string.html#tempCString
Currently I use something like:
----
import std.stdio;
import core.memory : GC;
struct scoped(A : T[], T) {
T[] arr;
this(T[] arr) {
this.arr = arr;
writefln("Allocate %d %s's (ptr = %x)", arr.length, T.stringof,
arr.ptr);
}
alias arr this;
@disable
this(this);
~this() {
writefln("Deallocate %d %s's (ptr = %x)", this.arr.length,
T.stringof, this.arr.ptr);
version(none) {
GC.free(this.arr.ptr);
} else {
delete this.arr;
}
GC.minimize();
this.arr = null;
}
}
void main() {
scoped!(int[]) bytes = new int[100_000];
}
----
It's the nearest to scope int[] bytes = new int[100_000]; I could
find.