C++ - 谨防因构造函数抛出异常而引发的问题
来源:互联网 发布:fastreport 数据分页 编辑:程序博客网 时间:2024/06/05 18:05
1. 构造函数是没有返回值的,不能依靠返回值来判断构造对象成功与否。此问题的标准解决方案是抛出一个异常。
2. 棘手的问题:
如果一个C++对象在构造的过程中出现问题,那它就不能称之为对象。既然不是一个对象,析构也就无从谈起。
3. 构造函数抛出异常后的对象清理工作需要有程序员来负责。
4. 如果再C++的构造函数里创建了其他东西,就必须考虑构造函数发生异常的情况。
5. 正确处理方法:
2. 棘手的问题:
如果一个C++对象在构造的过程中出现问题,那它就不能称之为对象。既然不是一个对象,析构也就无从谈起。
3. 构造函数抛出异常后的对象清理工作需要有程序员来负责。
4. 如果再C++的构造函数里创建了其他东西,就必须考虑构造函数发生异常的情况。
5. 正确处理方法:
发生异常时先将已经创建的东西释放掉,然后再重新抛出异常给上层调用代码去处理:
CObject::CObject(){ m_pSubObject = new CSubObject(); try { // 构造函数体 } catch(...) { delete m_pSubObject; // 清理对象 throw; // 抛出异常,交给上层调用 }}6. 另一种解决方案:
class CObject{public: CObject() { m_pSubObject = new CSubObject(); // 无需处理可能产生的异常 } ~CObject() { // 对象清理工作由智能指针std::auto_ptr自动处理 }protected:private: std::auto_ptr<CSubObject> m_pSubObject;};
- C++ - 谨防因构造函数抛出异常而引发的问题
- 编写高质量代码——谨防因构造函数抛出异常而引发的问题
- 构造函数、析构函数抛出异常的问题
- 构造函数、析构函数抛出异常的问题
- 构造函数、析构函数抛出异常的问题
- 构造函数、析构函数抛出异常的问题
- 构造函数 抛出异常
- 构造函数抛出异常
- 构造函数中抛出的异常
- 构造函数中抛出的异常
- C++构造函数中抛出的异常
- 构造函数中抛出的异常
- C++构造函数中抛出的异常
- 构造函数中抛出的异常
- 构造函数中抛出的异常
- 构造函数中抛出的异常
- 构造函数中抛出的异常
- 构造函数中抛出的异常
- 女程序员的征婚
- Android之动态更新通知栏(QQ续四)
- 根据个人理解简单介绍接口和抽象类的区别
- 单链表一(链表的实现)
- 可是听了半天C++五子棋
- C++ - 谨防因构造函数抛出异常而引发的问题
- 嵌入式经典面试题(转)
- 八卦太极智能面像法
- sqlite位运算,sql位运算符
- 字符串模式匹配
- 博客转移到http://www.jxqc.org/
- 淡墨写韵,不守起承转合
- Cloud Foundry samples学习笔记4:使用rabbitmq协作计算圆周率
- DTO