On Monday, 3 February 2014 at 17:58:43 UTC, Namespace wrote:
On Monday, 3 February 2014 at 17:50:33 UTC, Martin wrote:
On Monday, 3 February 2014 at 17:43:09 UTC, Namespace wrote:
On Monday, 3 February 2014 at 17:32:07 UTC, Martin wrote:
Oops, I of course meant:

static Test createFromString(string str)
{
return new Test(str);
}

You _can_ use scoped but it may allocate way to much and it's ugly to use:
http://dlang.org/phobos/std_typecons.html#.scoped

AFAIK scope'd classes was only deprecated because it _can_ be solved with a library solution and scope is/was not fully implemented. So it was more easy to depecate it and replace it with a library solution, as to implement scope as it stand in the docs.

I'm aware of "scoped", that's why I used this specific example. How do you use scoped on a function that returns a new instance of some object?

auto obj = scoped(functionThatReturnsNewObject());

That obviously doesn't work.

In this case where your object already exist and is on the geap, you may want to use Unique:

----
import std.stdio;
import std.typecons;

class Foo {
        ~this() {
                writeln("Foo::DTor");
        }
}

Foo createNewFoo() {
        return new Foo();
}

void main() {
        {
                writeln("Startt");
                Unique!(Foo) obj = Unique!(Foo)(createNewFoo());
                writeln("End");
        }
        
        writeln("end of main");
}
----

That's exactly what I was looking for. Brilliant, thanks!

Reply via email to