On Monday, 1 June 2015 at 12:50:28 UTC, Marc Schütz wrote:
Also, object with destructors need to have more restrictions:

    S {
        ~this();
    }

    void foo() {
        S s;
        if(condition)
            bar(s);
        // <- should we run the destructor here?
    }

This can either be solved by making such cases non-eligible, or by "remembering" whether an object was moved using a hidden boolean variable. AFAIK the latter is incidentally the solution Rust chose.

Wouldn't the compiler just do something like

if(condition)
{
    bar(s); // Do a move; the destructor is run inside bar
    return;
}
else
{
    s.__dtor();
    return;
}

In which case, the destructor is always run in the right spot, and the compiler can guarantee that a move is done rather than a copy?

- Jonathan M Davis

Reply via email to