On 03/21/2017 01:08 AM, ANtlord wrote:
void method(bool flag) @nogc
{
    scope MyClass obj;
    if(flag) {
        obj = new MyClass(1);
    } else {
        obj = new MyClass(2);
    }
    // using obj
}

Another option is std.conv.emplace:

import std.conv : emplace;

class MyClass {
    this(int) @nogc {
    }

    ~this() @nogc {
    }
}

void method(bool flag) @nogc
{
    void[__traits(classInstanceSize, MyClass)] buffer = void;
    MyClass obj;

    if(flag) {
        obj = emplace!MyClass(buffer, 1);
    } else {
        obj = emplace!MyClass(buffer, 2);
    }

    // Unfortunately, destroy() is not @nogc
    // scope(exit) destroy(obj);
}

void main() {
    method(false);
    method(true);
}

Ali

Reply via email to