考试网 >> IT认证 >> 水平 >> 软件指导 >> 构造函数中抛出的异常

构造函数中抛出的异常

发布时间:2006-06-28 05:19     点击:
分页:上一页  1 [2] 3 4 5  下一页

{

//do other job

// 由于资源不够,对象构建失败

// 把status置0,通知对象的构建者

status = 0;

}

virtual ~ MyTest_Base () 

{

cout << “销毁一个MyTest_Base类型的对象” << endl;

}

protected:

};

void main()

{

int status;

MyTest_Base obj1(status);

// 检查对象的构建是否成功

if(status ==0) cout << “对象构建失败” << endl;

}

  程序运行的结果是:

  对象构建失败

  销毁一个MyTest_Base类型的对象

  没错,对象的析构函数被运行了,这与C++标准中所规定的面向对象的一些特性是有冲突的。一个对象都没有完成自己的构造,又何来析构!好比一个夭折的畸形儿还没有出生,又何来死之言。因此这种方法是行不通的。那怎么办?那就是上面那个结论中的后一句话是对的,通知对象的构造失败的唯一方法那就是在构造函数中抛出异常,但原因却不是由于构造函数没有返回值而造成的。恰恰相反,C++标准中规定构造函数没有返回值正是由于担心很容易与面向对象的一些特性相冲突,因此干脆来个规定,构造函数不能有返回值(主人公阿愚的个人理解,有不同意见的朋友欢迎讨论)。

  2、构造函数中抛出异常将导致对象的析构函数不被执行。哈哈^-^,阿愚很开心,瞧瞧!如果没有C++的异常处理机制鼎立支持,C++中的面向对象特性都无法真正实现起来,C++标准总不能规定所有的对象都必须成功构造吧!这也太理想化了,也许只有等到共产主义社会实现的那一天(CPU可以随便拿,内存可以随便拿,所有的资源都是你的!)才说不定有可能·····,所以说C++的异常处理和面向对象确实是谁也离不开谁。当然示例还是要看一下,如下:

class MyTest_Base

{

public:

MyTest_Base (string name = “”) : m_name(name)

{

throw std::exception(“在构造函数中抛出一个异常,测试!”);
分页:上一页  1 [2] 3 4 5  下一页
版权申明:未经书面授权请勿转载本站信息!!作品版权归所属媒体与作者所有!!
发表评论: 匿名发表 用户名: 查看评论
您将承担一切因您的行为、言论而直接或间接导致的民事或刑事法律责任
留言板管理人员有权保留或删除其管辖留言中的任意内容
本站提醒:不要进行人身攻击。谢谢配合。
在本站搜索相关信息
2003-2005 Ksw123.com All Rights Reserved. - TOP
Copyright © 2006 Ksw123.com. All rights reserved.中国考题网 版权所有