returning struct, destructor

Eugene Wissner via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Dec 21 05:16:14 PST 2016


On Wednesday, 21 December 2016 at 12:32:51 UTC, Nicholas Wilson 
wrote:
> On Wednesday, 21 December 2016 at 11:45:18 UTC, Eugene Wissner 
> wrote:
>> Consider we have a function that returns a struct. So for 
>> example:
>>
>> import std.stdio;
>>
>> struct A {
>>     ~this() {
>>         writeln("Destruct");
>>     }
>> }
>>
>> A myFunc() {
>>     auto a = A(), b = A();
>>     if (false) {
>>         return a;
>>     }
>>     return b;
>> }
>>
>> void main() {
>>     myFunc();
>> }
>>
>> 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?
>> Thx
>
> Structs are value types, so unless they you pass them by 
> pointer/reference, they get copied.
>
> in myFunc it prints "Destruct" twice, one for a and once for b. 
> In main it prints it one more for the (discarded) A returned 
> from myfunc.

Why if the "if block" is removed, the code prints "Destruct" only 
two times. One because "a" goes out of scope and one in the main 
function. I don't understand, why "if (false) ..." changes the 
behavior


More information about the Digitalmars-d-learn mailing list