c++ - C++ 中的构造函数和析构函数失败

标签 c++ exception constructor destructor

我有一个关于 C++ 中失败的构造函数和失败的析构函数的问题。

我注意到当构造函数失败时,会抛出一个异常。但是在析构函数中没有抛出异常。

我的问题是

1) 如果构造函数失败,会抛出什么异常?坏分配?或其他相关的东西?在什么情况下,构造函数会失败?构建成功的部分呢?

2) 在什么情况下,析构函数会失败?如果没有抛出异常,析构函数会发生什么?编译器如何处理它?它所调用的函数的返回值是多少?

谢谢!

非常感谢任何意见!

最佳答案

  1. 如果构造函数失败,只有在实现构造函数时才会抛出异常,以便抛出异常。 (您可能需要区分内存分配和构造。使用 new 分配内存可能会失败并引发 std::bad_alloc 异常。)

  2. 一般情况下,构造函数不会失败。它只有在编写时才会失败,这样它可能会失败。如果是这样,它如何失败取决于它是如何编写的。通常,应该编写析构函数以使其不会失败,因为从析构函数中抛出异常是不安全的。 (那是因为它们可能会在堆栈展开期间被调用。)

请注意,您问题中使用的“失败”通常是指运行时失败。所以编译器与它无关。此外,构造函数和析构函数都不返回任何内容。

关于c++ - C++ 中的构造函数和析构函数失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2343191/

相关文章:

c++ - Twitter OAuth2 的 QNetworkRequest 返回禁止错误

c++ - 谷歌 Protocol Buffer 。 C++ 错误 : 'protobuf' does not name a type

c# - 如果请求的实体在 Db 中不存在,我应该抛出哪个异常?

android - 使用 Material Design 当程序从启动器 Activity 转到另一个时应用程序崩溃

windows - Grails较少资源的插件错误,同时编译较少的文件

java - java中的setter和getter有什么意义?

javascript在函数构造函数中访问 "this"

c++ - 在 boost 日志中组合过滤器

C++双向链表程序

c++ - 以基类作为参数的派生类构造函数(这是好的做法吗?)