Confusion regarding struct lifecycle

Matt Elkins via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Feb 16 17:50:28 PST 2016


On Tuesday, 16 February 2016 at 08:18:51 UTC, Ali Çehreli wrote:
> When a temporary Foo object is moved into the array, the 
> temporary object is set to Foo.init. This temporary object 
> lives on the stack. In fact, all temporary Foo objects of 
> Foo.this(int) live at the same location.
>
> After Foo(8) is moved into the array and set to Foo.init, now 
> Foo(1) is constructed on top of it. For that to happen, first 
> the destructor is executed for the first life of the temporary, 
> and so on...
>
> There is one less Foo.init destruction because conceptually the 
> initial temporary was not constructed on top of an existing 
> Foo.init but raw memory.

I guess that makes sense. But doesn't it imply that a copy is 
happening, despite the @disabled post-blit? The desired behavior 
was to construct the Foos in place, like with a C++ initializer 
list.



More information about the Digitalmars-d-learn mailing list