Can Scope Be Used for Anonymous Objects?

Stanislav Blinov stanislav.blinov at gmail.com
Wed Oct 17 21:23:58 UTC 2018


On Wednesday, 17 October 2018 at 20:53:02 UTC, Vijay Nayar wrote:

> This particular use of "scope" I overheard at the last DConf, 
> and I believe it has been added to the official documentation 
> here:  https://dlang.org/spec/expression.html#new_expressions
>
>     If a NewExpression is used as an initializer for a function 
> local variable with
>     scope storage class, and the ArgumentList to new is empty, 
> then the instance is
>     allocated on the stack rather than the heap or using the 
> class specific allocator.

Class-specific allocators (aka overriding 'new') were deprecated 
a long time ago, and this particular use of 'scope' should 
follow. Unfortunately, as with many other things in D, 
allocators, 'scope', DIP1000 etc are somewhere between here and 
there...

> I didn't know about the std.typecons scoped, it looks really 
> useful, especially when you want to only create the object when 
> short-circuiting fails, like in the middle of an "||" 
> expression.
>
> One drawback of "scoped", however, is that it doesn't appear to 
> warn you if you accidentally let the reference escape out of 
> the function, unlike a scope variable.

That's an artifact of it's implementation predating DIP25 and 
DIP1000, and those DIPs themselves not being realized fully.

>> Why, exactly, is a trivial thing like this even a class?

> Porting C++ code which unfortunately makes heavy use of 
> inheritance.  I originally had this as a struct until I much 
> later stumbled into the other classes that were inheriting from 
> it.

Ouch. If there aren't any virtual functions, you could "inherit" 
via struct inclusion and alias this. Or just take artistic... 
err... porting license and deviate from the original 
implementation :)


More information about the Digitalmars-d-learn mailing list