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