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