Why is dtor called for lazy parameter?
andrey.zherikov at gmail.com
Fri Sep 18 14:14:31 UTC 2020
On Friday, 18 September 2020 at 13:28:39 UTC, Simen Kjærås wrote:
> Indeed. As we can see from the output, first do_lazy() is
> called from test.main, then create() is called (this happens
> inside do_lazy, as s is lazy). When create() returns, the
> scoped!S you created goes out of scope and is destroyed.
It seems that dtor is called at exit from lazy delegate, not at
exit form create():
-> void test.main()
-> test.do_lazy(lazy S s)
1 S test.S.this(int n)
-> 1 test.do_something(S s)
<- 1 test.do_something(S s)
1 void test.S.~this()
<- test.do_lazy(lazy S s)
-> 1703096 test.do_something(S s)
<- 1703096 test.do_something(S s)
<- void test.main()
This doesn't even allow me to copy the value of 's' in do_lazy().
More information about the Digitalmars-d-learn