pointer escaping return scope bug?
ShadoLight
ettienne.gilbert at gmail.com
Fri Nov 25 15:03:57 UTC 2022
On Friday, 25 November 2022 at 14:07:28 UTC, ShadoLight wrote:
>> On Saturday, 19 November 2022 at 14:07:59 UTC, Nick Treleaven
>>> ```d
>>> @safe:
>>>
>>> struct LockedFile
>>> {
>>> private int* fps;
>>>
>>> auto fp() return scope => fps;
>>> }
>>>
>>> void main()
>>> {
>>> int* p;
>>> {
>>> auto lf = LockedFile(new int);
>>> p = lf.fp;
>>> }
>>> assert(p != null); // address escaped
>>> }
>>> ```
[snip]
>
> I don't grok how `lf` can survive the local scope. Or am I
> missing something?
Perhaps because the local scope is not pushed as a separate
(anonymous) function on the stack... if true then, yes, then `lf`
will indeed have the same physical lifetime as main (and `p`)...?
On the other hand, if you add a destructor to `LockedFile`, it
will be invoked at the end of the local scope, not the end of
main.
I find it a bit confusing what the term "lifetime" should pertain
to in the case of variables declared inside a local scope inside
a function - destructor invocation or physical existence of the
variable on the stack?
But this has no bearing on the heap allocation and the lifetime
of `p` in the example.
More information about the Digitalmars-d-learn
mailing list