1. 程式人生 > >解構函式為什麼不能顯示呼叫?

解構函式為什麼不能顯示呼叫?

今天和大家分享一個我在定義類的解構函式時,發現不能顯示的呼叫我定義的解構函式,這是為什麼呢??

#include<iostream>
using namespace std;
#include<string.h>

class String
{
public:
String(const char* str = "")
{
if (str == NULL)
{
_str = new char[1];
*_str = '\0';
}
else
{
_str = new char[strlen(str) + 1];
strcpy(_str, str);
}
}

~String()
{
if (_str)
{
delete[] _str;
_str = NULL;
}
cout << this << endl;
}


private:
char* _str;
};

int main()
{

String s1("hello");
String s2(s1);
system("pause");
return 0;

}

     看出問題出在哪了嗎??似乎解構函式定義的沒有問題啊??這是因為你在main函式中多加了句system("pause");就是這句,為什麼呢??它的作用本來是防止程式執行結束閃退的問題,但是當程式執行到system("pause"); 時,會輸出“請按任意鍵繼續。。。”此時,主函式還未執行完,String變數為區域性變數,只有等到函式體退出時,才會銷燬,可是如果樓主你按下任意鍵進,函式體執行完畢,會輸出“this指標的內容”,但由於輸出視窗隨後就關閉了,你是無法看到的。

     解決辦法:1.去掉system("pause");按F10進行除錯

                      2.

int main()

 {

    {

        String s1("hello");

String s2(s1);

    }

   system("pause");

   return 0;

}