Hi,

I've been working in high level languages (delphi, java, c#) for
several years and have recently  started to look into c++.

I'ts fairly easy to migrate the "best practices" from other languages
to c++, but there is one thing that I can't really work out; resource
cleanup together with exceptions.

In all the above mentioned languages there exist a "finally" clause
which is used to place cleanup code independent weither an exception
occured or not, but I cannot find anything similar in C++. The obvous
thing is to place cleanup code in all catch blocks aswell as after the
code protected by the try block, something like this (pseudocode)


// allocate resource X here
try
{
  // use resource X here
  // a exception could potenially be raised in the code
  // above


  // --> release resource X --<

}
catch (exceptiontype1 a)
{
  // exceptions error handling for typed exception 1

  // --> release resource X --<
}
catch (exceptiontype2 b)
{
  // exceptions error handling for typed exception 2

  // --> release resource X --<
}

As you can see the cleanup code is duplicated 3 times (not very DRY)
If I would have implemented the same scenario in c# the cleanupcode
would have been placed in a "finally" clause only once, and would be
executed wither an exception occured or not.

Since I'm quite new to c++ I'm sure I just missed something very vital
here, and would like to know how you solve scenarios like this in C++.

//John

Reply via email to