returning struct, destructor

bauss via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Dec 21 10:02:54 PST 2016


On Wednesday, 21 December 2016 at 15:01:20 UTC, Eugene Wissner 
wrote:
> On Wednesday, 21 December 2016 at 14:15:06 UTC, John C wrote:
>> On Wednesday, 21 December 2016 at 11:45:18 UTC, Eugene Wissner 
>> wrote:
>>> This prints 3 times "Destruct" with dmd 0.072.1. If I remove 
>>> the if block, it prints "Destruct" only 2 times - the 
>>> behavior I'm expecting. Why?
>>
>> Possibly to do with named return value optimisation.
>
> Isn't an optimization that changes the behavior bad? I had a 
> crash in the code where the destructor did something 
> meaningfull, freed the memory (the same pointer) twice.

It isn't an optimization that changes behavior.

It removes an unnecessary allocation for the returning copy of 
the struct, as the return value is never used. Hence why it's 
pointless that it would be compiled anyway.


More information about the Digitalmars-d-learn mailing list