I read the recent discussion on the subject (TDPL: Manual invocation of
destructor) but I still don't understand what is the use case clear() wants to
cover?

Assume for a moment that we have this class:

class Connection {
        this() { connect(); }
        ~this() { if (connected) disconnect(); }
        void disconnect() { ... }
        ...
}

Now I see the following use cases:

// The connection is closed at some later point if at all.
var c1 = new Connection;


// I want the connection closed at the end of the function.
// Should be safe everytime.
void foo() {
        var c2 = new Connection;
        scope(exit) c2.disconnect();
        ...
}


// I want the connection closed and memory released.
// (I know what I'm doing)
void bar() {
        var c2 = new Connection;
        scope(exit) {
                c2.disconnect();        // Even better, call the constructor.
                GC.free(c2);
        }
        ...
}

What's left for clear()? In which scenario would I like the default
constructor called again?

Thanks

Reply via email to