我有一个关于 C++ 中失败的构造函数和失败的析构函数的问题。
我注意到当构造函数失败时,会抛出一个异常。但是在析构函数中没有抛出异常。
我的问题是
1) 如果构造函数失败,会抛出什么异常?坏分配?或其他相关的东西?在什么情况下,构造函数会失败?构建成功的部分呢?
2) 在什么情况下,析构函数会失败?如果没有抛出异常,析构函数会发生什么?编译器如何处理它?它所调用的函数的返回值是多少?
谢谢!
非常感谢任何意见!
最佳答案
如果构造函数失败,只有在实现构造函数时才会抛出异常,以便抛出异常。 (您可能需要区分内存分配和构造。使用
new
分配内存可能会失败并引发std::bad_alloc
异常。)一般情况下,构造函数不会失败。它只有在编写时才会失败,这样它可能会失败。如果是这样,它如何失败取决于它是如何编写的。通常,应该编写析构函数以使其不会失败,因为从析构函数中抛出异常是不安全的。 (那是因为它们可能会在堆栈展开期间被调用。)
请注意,您问题中使用的“失败”通常是指运行时失败。所以编译器与它无关。此外,构造函数和析构函数都不返回任何内容。
关于c++ - C++ 中的构造函数和析构函数失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2343191/