构造函数中的throw

来源:互联网 发布:淘宝店铺违规考试答案 编辑:程序博客网 时间:2024/05/29 16:50
        public RobotSpeedData(string str)        {            if (StringCheck(str))            {                string s = str.Trim();                s=s.Remove(0, 1);                s=s.Remove(s.Length - 1);                string[] spds = s.Split(',');                Tcp = Convert.ToInt32(spds[0]);                Ori = Convert.ToInt32(spds[1]);                Leax = Convert.ToInt32(spds[2]);                Reax = Convert.ToInt32(spds[3]);            }            else            {                Tcp = 0;                Ori = 0;                Leax = 0;                Reax = 0;                throw new Exception("the str can't convert to RobotSpeedData");            }        }//这段代码如果进入else中,将不会返回一个为0的新实例//而是一个null/////////网上资料:构造函数中抛出异常时概括性总结 (1) C++中通知对象构造失败的唯一方法那就是在构造函数中抛出异常; (2) 构造函数中抛出异常将导致对象的析构函数不被执行; (3) 当对象发生部分构造时,已经构造完毕的子对象将会逆序地被析构; (4) 其是还是那句话, “C++的异常处理不会破坏任何一条面向对象的特性!”。 4 关于异常的其他问题① 过度使用异常 :首先,使用异常很方便,所以程序员一般不再愿意编写处理错误的代码,而仅仅是简简单单的抛出一个异常。这样做是不对的,对于完全已知的错误,应该编写处理这种错误的代码,增加程序的鲁棒性。另外,异常机制的效率很差。② 将异常与普通错误区分开:对于普通的完全一致的错误,应该编写处理这种错误的代码,增加程序的鲁棒性。只有外部的不能确定和预知的运行时错误才需要使用异常。③ 异常对象中包含的信息 :一般情况下,异常对象唯一有用的信息就是类型信息。但使用异常带字符串的构造函数时,这个字符串还可以作为额外的信息。调用异常对象的getMessage()、toString()或者printStackTrace()方法可以分别得到异常对象的额外信息、类名和调用堆栈的信息。并且后一种包含的信息是前一种的超集。

                                             
0 0
原创粉丝点击