<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [TOC] # 棧解旋 異常被拋出后,從進入try塊起,到異常被拋擲前,這期間在棧上構造的所有對象,都會被自動析構。 析構的順序與構造的順序相反,這一過程稱為棧的解旋(unwinding). # 異常的生命周期 ## 產生三個對象 ~~~ class Maker { public: Maker() { cout << "Maker的構造" << endl; } Maker(const Maker &m) { cout << "Maker的拷貝構造" << endl; } ~Maker() { cout << "Maker的析構" << endl; } }; void func() { //在拋出異常的函數中,如果拋出異常之后,但函數沒有結束,這時,棧上申請的對象都會被釋放 //這就叫棧解旋 Maker m; //第一個對象,在異常接收前被釋放 cout << "--------" << endl; //第二個對象,是第一個對象拷貝過來的 throw m;//這個m是Maker m拷貝一份的,會調用拷貝構造 cout << "func函數結束" << endl; } void test02() { try { func(); cout << "func()代碼后" << endl; } catch (Maker m) { //第三個對象,是第二個對象拷貝過來的 //第二個和第三個對象在catch結束時釋放 cout << "接收一個Maker類型的異常" << endl; } } ~~~ 輸出 ~~~ Maker的構造 -------- Maker的拷貝構造 Maker的析構 Maker的拷貝構造 接收一個Maker類型的異常 Maker的析構 Maker的析構 ~~~ ## 產生兩個對象 ~~~ //產生二個對象 void func2() { //第一個對象 throw Maker();//匿名對象 } void test02() { try { func2(); } catch (Maker m1)//第二個對象 { cout << "接收一個Maker類型的異常" << endl; //第一個和第二個對象在catch結束時釋放 } } ~~~ ## 產生一個對象 ~~~ //產生一個對象,常用這種方式 void func3() { throw Maker();//匿名對象 } void test03() { try { func3(); } catch (Maker &m1) { cout << "接收一個Maker類型的異常" << endl; } } ~~~ ## 取地址方式產生1個對象 ~~~ void func4() { //編譯器不允許對棧中的匿名對象取地址操作 //throw Maker();//匿名對象 //編譯器允許對堆區中的匿名對象取地址操作 throw new Maker(); } void test02() { try { func4(); } catch (Maker *m1) { cout << "接收一個Maker類型的異常" << endl; //delete m1; } } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看