On Sunday, 6 August 2017 at 02:10:31 UTC, Moritz Maxeiner wrote:
On Sunday, 6 August 2017 at 01:18:50 UTC, Johnson Jones wrote:
On Saturday, 5 August 2017 at 23:09:09 UTC, Moritz Maxeiner wrote:
On Saturday, 5 August 2017 at 17:08:32 UTC, Johnson Jones wrote:
using gtk, it has a type called value. One has to use it to get the value of stuff but it is a class. Once it is used, one doesn't need it.


Ideally I'd like to treat it as a struct since I'm using it in a delegate I would like to minimize unnecessary allocations. Is there any way to get D to allocate a class on the stack like a local struct?

The easy way is through std.typecons.scoped [1].
Here be dragons, though, because classes are reference types.

[1] https://dlang.org/phobos/std_typecons.html#.scoped

Thanks, I didn't think it created on the stack but it makes sense to do so.

See the source [1] as to why: typeof(scoped!T) is a (non-copyable) struct that holds the memory for the T object inside it.

The only issue is that it escaping the reference?

Yes, don't escape references, that's the reason for my comment:
Here be dragons, though, because classes are reference types.

[1] https://github.com/dlang/phobos/blob/v2.075.0/std/typecons.d#L6613

I don't think you understand what I'm saying.

If I use this method to create a "reference" type on the stack rather than the heap, is the only issue worrying about not having that variable be used outside that scope(i.e., have it "escape")?

Obviously since it's on the stack it will be invalid after the function call, but I'm talking about other pitfalls. I don't see any but I want to be sure. Also, does it do the allocation at compile time(reserve space on the stack for the variable along with all the others or does it "allocate" space on the stack at runtime?... which is slightly slower).




Reply via email to