Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C++;,如果基类构造函数异常,那么构造函数和析构函数的顺序可能是这样的?_C++_Exception_Constructor - Fatal编程技术网

C++ 在C++;,如果基类构造函数异常,那么构造函数和析构函数的顺序可能是这样的?

C++ 在C++;,如果基类构造函数异常,那么构造函数和析构函数的顺序可能是这样的?,c++,exception,constructor,C++,Exception,Constructor,但若在Base为构造函数时捕获了一些可怕的或异常,那个么 顺序可能是: Base Child ~Child ~Base 有人能写一个演示来说明这一点吗?C++通常不会在构造中抛出异常,但是如果它确实如此,那么它会导致输出吗? 谢谢你的帮助。 我不确定在通常的代码中是否会发生这种情况。在复杂的基构造函数中,或是发生了什么错误,或是别的什么,这会改变通常的输出吗? 如果是这样,谁能给我举个例子吗?包括 Base ~Base Child ~Child Base() { 不能包括 Base()

但若在Base为构造函数时捕获了一些可怕的或异常,那个么 顺序可能是:

Base 
Child
~Child
~Base
有人能写一个演示来说明这一点吗?C++通常不会在构造中抛出异常,但是如果它确实如此,那么它会导致输出吗?

谢谢你的帮助。 我不确定在通常的代码中是否会发生这种情况。在复杂的基构造函数中,或是发生了什么错误,或是别的什么,这会改变通常的输出吗? 如果是这样,谁能给我举个例子吗?

包括
Base 
~Base
Child
~Child
Base() { 不能
包括
Base()
{

cout如果在
类构造函数中发生异常,则不会调用析构函数。
只是因为没有需要销毁的完整对象

情不自禁地


“它不会死,因为它从来没有活过!”如果在
基类构造函数中发生异常,则不会调用析构函数。
只是因为没有需要销毁的完整对象

情不自禁地


“它不会死,因为它从未活过!”你为什么不能“写一个演示来说明这一点”我自己写的,我写了一些测试代码,但是好像C++不支持堆栈ReCurLL,在得到异常后,将不会调用DeutsUror。我编写了一些测试代码,但是在捕获异常之后,不会调用析构函数。有没有方法说明如果在StrucutBasic中发生错误或异常,输出将是BAS。e()~Base()Child()~Child()。为什么你不能“写一个演示来说明这一点”我自己写的,我写了一些测试代码,但是好像C++不支持堆栈ReCurLL,在得到异常后,将不会调用DeutsUror。我编写了一些测试代码,但是在捕获异常之后,不会调用析构函数。有没有方法说明如果在StrucutBasic中发生错误或异常,输出将是BAS。e()~Base()Child()~Child()。他只是想做一个测试,这样他就可以在实验中发现自己。我尝试过你的方式,似乎在B构造函数调用后,不会调用其他构造函数。他只是想做一个测试,这样他就可以在实验中发现自己。我尝试过你的方式,似乎在B构造函数调用后,不会调用其他构造函数。
Base 
~Base
Child
~Child
include <stdexcept>
Base()
{
    cout << "Base"<<endl;
    throw std::runtime_error("error");
}