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