[Issue 6194] New: [GSoC] Destructor gets called on object before it is copied when calling writeln()

d-bugmail at puremagic.com d-bugmail at puremagic.com
Wed Jun 22 08:50:51 PDT 2011


http://d.puremagic.com/issues/show_bug.cgi?id=6194

           Summary: [GSoC] Destructor gets called on object before it is
                    copied when calling writeln()
           Product: D
           Version: D2
          Platform: All
        OS/Version: Windows
            Status: NEW
          Severity: major
          Priority: P2
         Component: DMD
        AssignedTo: nobody at puremagic.com
        ReportedBy: cristi.cobzarenco at gmail.com


--- Comment #0 from Cristi Cobzarenco <cristi.cobzarenco at gmail.com> 2011-06-22 08:46:01 PDT ---
import std.stdio;
import std.conv;

struct Test {
    int x;

    this( int m )     { x = m; }
    this( this )      { writeln( "Postblit: ", x ); }

    ~this()           { x = 42; }

    string toString() { return to!string( x ); }
}

int main(string[] argv) {
    auto a = Test(3);
    writeln( a );
    return 0;
}

When the running the code above, 42 gets printed instead of 3. Looking at the
"Postblit: " writes, one can see that the postblit ctor gets called 6 times and
only the last copy sets x to 42. It seems that at the last copy the destructor
gets called before the object gets blitted.

Using a debugger, I think I found the offending copy at line 1599 in file
format.d. Strangely, as much as I tried to reproduce the same kind of copying,
I could never get the bug to appear without using writeln.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list