C++异常处理模型除了支持面向过程的C风格程序中的异常处理外(就是没有面向对象的概念,完全是C程序,整个程序实际就是函数的集合,但却用C++编译器来编译这样的C程序,所以这样的程序中是可以a使用C++的异常处理机制的,要不怎么说C++是兼容C语言的呢?但是需要注意的是,单纯的C语言程序中是不能使用C++异常处理模型进行编程的。是不是有点说拗口了?有点糊涂了呢?其实很简单,那就是如果程序中使用了C++异常处理机制,也即代码中有try、catch和throw关键字,那么就必须使用C++编译器来编译这个程序。许多程序员朋友们在这里有一个理解上的误区,认为只有程序中使用了面向对象的概念,即使用class关键字来定义一个类结构才算得上C++程序,其实这种理解是片面的,如果程序中采用了C++异常处理机制,那么也有理由认为这是一个C++程序,哪怕程序的代码完全是C语言风格的,并且这样的程序用C编译器来编译肯定将会报错,提示未定义的try标示符等等错误信息),还支持面向对象程序中对象抛出的异常处理。
C++异常处理模型的确和面向对象是紧密结合的,除了在相遇篇中介绍到的用对象来描述程序中出现的异常之外,C++异常处理模型也对在面向对象程序中的对象实例所抛出的异常作了最完善的支持和处理。也许大家会觉得这很容易,没什么了不起的地方。但恰恰相反,实际上这才是C++异常处理模型最成功、最不可思议和最闪光的地方。而且由于C++异常处理模型对面向对象有了很好的支持和兼容,才使得C++异常处理模型本身的实现变得特别复杂,因为它需要跟踪每一个对象的运行情况和状态(关于C++异常处理模型的实现,会在爱的秘密篇中有详细剖析)。本文和接下来的几篇文章将讲述当对象实例抛出异常时将如何处理。
对象的生命周期一般有三种状态:构造、运行和析构销毁。因此对象抛出的异常也有这三种区别。是在对象构造时抛出的呢?还是对象运行时抛出的呢?或是析构对象时抛出的?这三种不同时候抛出的异常会将会产生不同的结果。本文首先讨论最常见的一种情况,在对象运行时抛出的异常,也即执行对象的成员函数时出现的异常。
对象的成员函数抛出的异常
1、老方法,看例子先,如下:
class MyTest_Base
{
public:
MyTest_Base (string name = “”) : m_name(name)