[Issue 3516] Destructor not called on temporaries

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sun May 30 15:59:11 PDT 2010


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


Brad Roberts <braddr at puremagic.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |braddr at puremagic.com


--- Comment #3 from Brad Roberts <braddr at puremagic.com> 2010-05-30 15:59:09 PDT ---
Reduced test case:
extern(C) int printf(const char*, ...);

int numctor, numdtor;

struct Tid
{
    this(int i) { ++numctor; }
    ~this() { ++numdtor; }
}

Tid f() { return Tid(1); }

// This temporary is destroyed
void test1() { Tid tid = f(); }

// This (invisible) temporary is never destroyed
void test2() { f(); }

void main()
{
    numctor = numdtor = 0;
    test1();
    printf("numctor = %d, numdtor = %d\n", numctor, numdtor);
    assert(numctor == 1);
    assert(numdtor == 1);

    numctor = numdtor = 0;
    test2();
    printf("numctor = %d, numdtor = %d\n", numctor, numdtor);
    assert(numctor == 1);
    assert(numdtor == 1);
}

Current results:
numctor = 1, numdtor = 1
numctor = 1, numdtor = 0
core.exception.AssertError at bug3516(31): Assertion failure

-- 
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