C ++中的构造函数和析构函数

时间:2014-06-10 00:31:36

标签: c++ visual-c++ c++builder

你能告诉我为什么不添加" getch()"或"系统("暂停")",结果就在第二个代码显示的第一个代码中,缺少部分析构函数中的代码

    #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;
     } 

在第一个代码中,结果是  &#34; chuc mung ban nam moi an khang thinh vuong&#34;

在第二个代码中,结果是 &#34; chuc mung ban nam moi an khang thinh vuong  Nam Tan Ty&#34; 在这种情况下,控制台在显示结果后不会暂停。

2 个答案:

答案 0 :(得分:3)

  

你能告诉我为什么不添加&#34; getch()&#34;或者&#34;系统(&#34;暂停&#34;)&#34;,结果就在第一个代码中

object超出范围,并在main()退出时被破坏。该代码示例中没有任何内容阻止main()退出,因此object将被立即销毁。

  

否则在第二个代码显示中缺少部分析构函数中的代码

getch / pause推迟main()退出,暂停时object仍在范围内,因此未被破坏爱好。

如果您希望在暂停代码之前销毁object,可以将object放入另一个范围,以便之前被破坏:

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

答案 1 :(得分:1)

在两种情况下输出都是相同的,尽管在第一种情况下暂停后运行析构函数,只要 不按control-C或控制中断就可以退出暂停 ...将在析构函数有机会运行之前终止您的程序。