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.

Reply via email to