`
shi5jin
  • 浏览: 38033 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

可以在构造函数里抛出异常吗?析构函数里呢?

阅读更多
  • 可以:当你不能正常地初始化(构造)对象时,你应该在构造函数里抛出异常。没有任何其它方法比抛出异常退出构造函数更合适了。
  • 不然:你可以在析构函数里抛出异常,但这个异常必须不能越过析构函数;如果因为抛出异常而退出了析构函数,任何糟糕的情况都可能发生,因为这违反了标准库及 C++ 语言本身的基本规则。不要这么做。
更详细的实例和解释尽在 TC++PL 附录 E

给你一个忠告:在某些“苛刻的”实时系统项目中,不该使用异常。例如,请参考 JSF 航空器 C++ 代码标准

原文地址http://www.research.att.com/~bs/bs_faq2.html#ctor-exceptions

分享到:
评论

相关推荐

    dotnet C# 如果在构造函数抛出异常 析构函数是否会执行.rar

    总结来说,当C#类的构造函数抛出异常时,析构函数不会执行。这是为了避免在对象生命周期的早期阶段就尝试清理一个从未完整构造的对象。为了确保资源的正确管理,程序员应该在构造函数中妥善处理异常,或者使用`...

    析构函数不能抛出异常的原因

    - **资源获取即初始化(RAII)**:采用RAII技术,可以在构造函数中获取资源,并在析构函数中释放资源。这种方法可以确保无论何时对象生命周期结束,资源都会被正确释放。 - **异常安全的设计模式**:使用诸如“惰性...

    构造函数中抛出的异常

    标准C++中定义构造函数是一个对象构建自己,分配所需资源的地方,一旦构造函数执行完毕,则表明这个对象已经诞生了,有自己的行为和内部的运行状态,之后还有对象的消亡过程(析构函数的执行)。可谁能保证对象的...

    C++箴言:防止异常离开析构函数

    例如,可以在构造函数或成员函数中完成可能抛出异常的操作,而不是在析构函数中。 2. **使用智能指针**:通过使用智能指针(如 `std::unique_ptr` 或 `std::shared_ptr`),可以自动管理资源的生命周期,从而减少在...

    C#编程艺术:构造函数与析构函数的奥秘

    ### C#编程艺术:构造函数与析构函数的奥秘 C#作为一种强大的面向对象的编程语言,在软件开发领域占据着举足轻重的地位。它不仅受到C++和Java的影响,还结合了现代编程语言的优点,如垃圾回收、类型安全、泛型支持...

    C++构造函数中抛出的异常

    C++程序员朋友们知道,C++中的构造函数是没有返回值的,所以不少关于C++编程方面的书上得出结论:“因为构造函数没有返回值,所以通知对象的构造失败的方法那是在构造函数中抛出异常”。主人公阿愚非常不同

    C++构造函数抛出异常需要注意的地方

    在这个例子中,如果`B`的构造函数抛出异常,`B`的析构函数不会执行,导致`resource`所指向的内存块无法被释放,从而造成内存泄漏。 为了避免这种问题,可以使用智能指针,如`std::unique_ptr`,来管理动态分配的...

    编写strcpy函数和类String的构造函数、析构函数、赋值函数和重载运算符函数[文].pdf

    strcpy 函数和类 String 的构造函数、析构函数、赋值函数和重载运算符函数 strcpy 函数是 C 语言中最基本的字符串拷贝函数,它的原型是 `char *strcpy(char *strDest, const char *strSrc);`,其中 `strDest` 是...

    编写类String 的构造函数、析构函数和赋值函数.docx

    在实际编程中,还需要考虑异常安全性和效率优化,例如使用深拷贝和浅拷贝的概念来防止悬挂指针,以及在动态内存分配失败时抛出异常。此外,为了遵循C++的"rule of three"(或现代的"rule of five"),还需要提供一个...

    CSDN技术文档大全(CHM)

    在C++中,构造函数抛出异常后,析构函数不会被调用。这种做法是合理的,因为此时对象并没有被完整构造。 如果构造函数已经做了一些诸如分配内存、打开文件等操作的话,那么C++类需要有自己的成员来记住做过哪些动作...

    小组学习:使用构造函数

    3. 避免在构造函数中抛出异常,因为这会导致对象的创建失败,而且很难捕获和处理。 五、工厂方法和构造函数 在某些情况下,我们可能希望控制对象的创建方式,这时可以使用工厂方法。工厂方法是一种特殊的静态方法...

    c++基础语法:构造函数与析构函数

    1. **析构函数不应抛出异常**:如果析构函数可能引发异常,应在内部捕获并处理,因为析构函数抛出异常可能会导致程序的不确定状态,特别是在容器如`std::vector`删除元素时。 2. **避免在析构函数中调用可能抛出...

    C++ Interview Questions

    处理这种异常的方法通常是在构造函数体内使用try-catch块,或者让构造函数抛出异常并由调用者处理。 ### 不同类型的构造函数 #### 默认构造函数 **问题**: 什么是默认构造函数? **解答**: 默认构造函数是指没有...

    C++与操作系统等面试题47

    在这个例子中,即使构造函数抛出异常,`std::unique_ptr`也会确保资源被正确释放,因为其析构函数会在对象生命周期结束时自动调用。 #### 析构函数中的异常 析构函数用于释放对象占用的资源。如果析构函数抛出异常...

    C#中构造函数和析构函数用法实例详解

    3. 在析构函数中不要抛出异常,因为析构函数在对象即将被销毁时调用,异常可能导致资源无法正确清理。 4. 使用`using`语句或`IDisposable`接口处理临时资源,以确保即使在异常情况下也能正确释放资源。 理解并熟练...

    C++异常处理总结

    12. 异常规格指函数抛出异常的种类,函数若不带异常规格声明,则可以认为能抛出任何异常。 13. try catch 的一种格式:try{}catch(...){}异常不仅仅是写try和catch。 14. 编写异常安全代码时考虑三点因素:何时何...

    php基础知识:类与对象(3) 构造函数和析构函数

    最后,尝试在析构函数中抛出异常会导致致命错误。 构造函数和析构函数是PHP中处理对象生命周期的关键工具,它们帮助开发者确保对象的正确创建和清理,从而维持代码的整洁和高效。掌握这两个概念对于编写健壮的面向...

    PHP 构造函数和析构函数原理与用法分析

    但需要注意的是,在析构函数中抛出异常是不被允许的,这会导致脚本运行出现致命错误。析构函数在脚本关闭时调用,此时所有的HTTP头信息已经发出,因此脚本关闭时的工作目录可能与SAPI(如apache)中的工作目录不同。...

    Python构造函数及解构函数介绍

    由于Python使用的是基于引用计数的垃圾回收机制,__del__()方法的调用时机并不像其他语言中的析构函数那样确定,它只会在对象的引用计数降至零时被调用,确保对象所占用的资源得到释放。 在Python中,__init__()...

Global site tag (gtag.js) - Google Analytics