簡體   English   中英

C ++中的構造方法和析構方法

[英]Constructor and Destructor in C++

你能告訴我為什么我不添加“ getch()”或“ system(” pause“)”的原因,結果在第一個代碼中正確,在第二個代碼顯示中卻缺少部分析構函數中的代碼

    #include "iostream.h"
    class chucmung1
    {
     public :
         chucmung1()
         {
                    cout <<"chuc mung ban nam moi an khang thinh vuong\n";

         }
         ~chucmung1()
         {
                     cout <<"Nam Tan Ty\n";
         }


    };

  //  the first code
     int main()
     {
      chucmung1 object;
      system("pause > NULL");    
     }

  // the second code 
        int main()
     {
      chucmung1 object;
     } 

在第一個代碼中,結果是“ chuc mung ban nam moi an khang Thinh vuong”

在第二個代碼中,結果是“ chuc mung ban nam moi an khang Thinh vuong Nam Tan Ty”。在這種情況下,顯示結果后控制台不暫停。

你能告訴我為什么我不添加“ getch()”或“ system(” pause“)”嗎,結果在第一個代碼中是正確的

object超出范圍並在main()退出時被破壞。 該代碼示例中沒有什么阻止main()退出,因此該object被立即銷毀。

否則在第二個代碼顯示中缺少部分析構函數中的代碼

getch / pause正在延遲main()的退出,並且該object在暫停時仍在作用域內,因此尚未被破壞。

如果希望在暫停代碼之前將object破壞,則可以將object放入另一個作用域,以便更早地對其進行破壞:

int main()
{
    {
        chucmung1 object;
    }
    system("pause > NULL");    
}

在這兩種情況下,輸出都是相同的,盡管在第一種情況下,析構函數在暫停之后運行,但前提是您不按control-C或control-break來退出暫停 ...這將在終止程序之前終止程序析構函數有機會運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM