Performance is an argument pro unwinding, because the default case (no exception, no unwinding) does not have to check for errors.
* Put an object in an invalid state
* Perform some operation that might unwind
* Fix the object again
If you unwind while the object is in an invalid state, and its destructor is called during unwinding, you can end up with undefined behavior.Linux 3.11 added support for the O_TMPFILE flag to open(2) so it's not even necessary to call unlink(2).
Of course, if the reason for the abort was memory scrambling that destroyed the registry of cleanup actions, things get messy, which is why it needs to deregister the signal handler.
I'm not keen on having to hijack the signal handler, nor of the global variables needed for the atexit (or equivalent) handler registry.
All things considered, I'd rather language + compiler support for unwinding with user settable cleanup handlers, a/k/a real exceptions.