First, I am well aware of [Why is there no 'finally' construct in C++?](https://softwareengineering.stackexchange.com/questions/197562/why-is-there-no-finally-construct-in-c) but a lengthy-growing comment discussion on another question seems to warrant a separate question.

Apart from the issue that `finally` in C# and Java can basically exist only once (== 1) per scope and a single scope can have multiple (== n) C++ destructors, I think that they are essentially the same thing. (With some technical differences.)

However, another user [argued](https://stackoverflow.com/questions/130117/throwing-exceptions-out-of-a-destructor/4098662?noredirect=1#comment55793208_4098662):

> 
> ... I was trying to say that a dtor is inherently a tool for (Release sematics) and
> finally is inherently a tool for (Commit semantics). If you don't see why: consider
> why it's legitimate to throw exceptions on top of each other in
> finally blocks, and why the same is not for destructors. (In some
> sense, it's a data vs. control thing. Destructors are for releasing
> data, finally is for releasing control. They are different; it's
> unfortunate that C++ ties them together.)
> 
> 
> 

Can someone clear this up?