[英]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.