C++的异常处理与Java的不同和变通
最近看到了几篇关于RAII(Resource Allocation Is Initialization)的文章,个人感觉这个方法实际就是C++中对Java的final block的模拟(可能不太恰当,因为C++是先出现的,但是姑且如此说)。
Java中引入final block就是为那些无论是否出现异常都需要被执行到的代码提供一个恰当的地方,避免code duplication。这是Java先进的地方,但是事有两面,这也是由于Java没有destructor而不得不采用的方法。
C++中至今没有引入final block的语法,我估计是因为C++中早就有了具备此项功能的东西---destructor,它同样能够不论异常发生与否,都被执行。只需将具有final block性质的代码放到某个专门为此设计的类的destrctor中即可。这种方法的缺陷是要定义新的class。这是C++的不足,但是同样体现了C++的精巧,能够用技巧实现的东西,轻易不会改动language level的东西。