Preventing nested struct destructor accessing stack frame

Nick Treleaven nick at geany.org
Fri Dec 23 12:01:07 UTC 2022


On Tuesday, 20 December 2022 at 06:31:09 UTC, ag0aep6g wrote:
> On 16.12.22 14:07, Nick Treleaven wrote:
>> This seems to work:
>> 
>>          ~this() @trusted { if (&i > cast(void*)1024) i++; }
>> 
>> It would be better if there was a struct property to get the 
>> context pointer though.
>
> A quick test suggests that the context pointer is the last item 
> in `tupleof`. So this might do the trick:
>
>     ~this() { if (this.tupleof[$ - 1] !is null) i++; }
>
> I don't know if it's guaranteed to work though. Might be an 
> implementation detail.

Great, thanks. The struct tupleof docs just link to the class 
tupleof docs, which say:

> The order of the fields in the tuple matches the order in which 
> the fields are declared.

So I think for a struct the context pointer has to come after any 
fields.


More information about the Digitalmars-d-learn mailing list