This is the pattern used by the SafeHandle object in the BCL. It's definitely the way to go. This way you ensure that finalization drags the least amount of objects into it.