Reuse object memory?
via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Tue Apr 21 06:31:01 PDT 2015
On Monday, 20 April 2015 at 21:36:35 UTC, Ali Çehreli wrote:
> final class Foo {
> uint id;
>
> @nogc
> this(uint id) {
> this.id = id;
> }
> }
>
> C reuse(C, T...)(ref C old, T ctorParams)
> {
> import std.conv;
> import std.typetuple;
>
> enum objectSize = __traits(classInstanceSize, C);
>
> void* oldPlace = cast(void*)old;
It's probably better to call the destructor here before calling
emplace, to complete the lifecycle of the old object.
> C newObject = emplace!C(oldPlace[0..objectSize],
> ctorParams);
>
> old = null;
>
> return newObject;
> }
>
> void main()
> {
> Foo f = new Foo(42);
>
> auto f2 = f.reuse(43);
>
> assert(f is null);
> assert(f2.id == 43);
> }
>
> Ali
More information about the Digitalmars-d-learn
mailing list