1. 程式人生 > >立此存照26[C++]為什麼VS2013不能顯示解構函式中的輸出語句

立此存照26[C++]為什麼VS2013不能顯示解構函式中的輸出語句

#include <iostream>
using namespace std;

class A
{
public:
	A()
	{
		cout << "A()" << endl;
	}
	~A()
	{
		cout << "~A()" << endl;
	}
};

class B : public A
{
public:
	B()
	{
		cout << "B()" << endl;
	}
	~B()
	{
		cout << "~B()" << endl;
	}
};

int main()
{
	A a;
	B b;

	system("pause");
	return 0;
}

執行結果:


我們明明看到命令列都出現:請按任意鍵繼續。。。的提示了,但解構函式的輸出語句還沒有執行!

究其原因就是,此時物件a、b還沒有被釋放,它們只有當執行到return語句時才釋放,而現在才執行到system()語句。

所以我們根本沒機會看不到解構函式的輸出語句被列印!

解決辦法就是,將解構函式的輸出裝置有命令列改為文字檔案,這樣程式執行結束後,就可以看到解構函式中的輸出語句了。

給改寫後的程式碼:

#include <iostream>
#include <fstream>
using namespace std;

fstream fout("destructor.txt", ios::app);

class A
{
public:
	A()
	{
		cout << "A()" << endl;
	}
	~A()
	{
		fout << "~A()" << endl;
	}
};

class B : public A
{
public:
	B()
	{
		cout << "B()" << endl;
	}
	~B()
	{
		fout << "~B()" << endl;
	}
};

int main()
{
	A a;
	B b;

	system("pause");
	return 0;
}
執行結果:

文字檔案中的內容: