How to "scope"?

Namespace rswhite4 at googlemail.com
Mon Feb 3 09:58:42 PST 2014


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");
}
----


More information about the Digitalmars-d-learn mailing list