Its destructor runs at the closing brace of the enclosing block, automatically. That happens whether you fall off the end, hit a return, or throw.
Order is strictly the reverse of construction. Locals die newest first, which matters when a later object depends on an earlier one. Inside one object, the destructor body runs, then members in reverse declaration order, then base classes.
{
Logger a;
Connection b(a);
} // ~b runs, then ~a
That reverse ordering is what keeps dependent resources safe. A connection that logs during shutdown can count on the logger still being alive. One caveat: only automatic-storage objects get this. A heap object made with new is untouched by scope exit; just the pointer dies.
This answer doesn't lend itself to a diagram - it reads best . No credits were charged.
Why there's no diagram: “”
The interactive diagram is below the answer - jump to diagram ↓ · Below it, the related concept . Jump to it ↓
The diagram below the answer is the concept . Jump to it ↓