真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C++銷毀一個自定義對象后,它里面的成員方法去哪兒了?

#include 
using namespace std;

class TestClass
{
public:
	void Print()
	{
		cout << "hello" << endl;
		//_a++;
	}

protected:
	//int _a = 0;
};

int main()
{
	TestClass *tc = new TestClass();
	delete tc;
	tc = NULL;
	tc->Print();
	return 0;
}

類似如上模型的代碼 坑了我好久

目前累計服務(wù)客戶上千余家,積累了豐富的產(chǎn)品開發(fā)及服務(wù)經(jīng)驗。以網(wǎng)站設(shè)計水平和技術(shù)實力,樹立企業(yè)形象,為客戶提供成都做網(wǎng)站、網(wǎng)站設(shè)計、網(wǎng)站策劃、網(wǎng)頁設(shè)計、網(wǎng)絡(luò)營銷、VI設(shè)計、網(wǎng)站改版、漏洞修補等服務(wù)。成都創(chuàng)新互聯(lián)公司始終以務(wù)實、誠信為根本,不斷創(chuàng)新和提高建站品質(zhì),通過對領(lǐng)先技術(shù)的掌握、對創(chuàng)意設(shè)計的研究、對客戶形象的視覺傳遞、對應(yīng)用系統(tǒng)的結(jié)合,為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,攜手廣大客戶,共同發(fā)展進步。

下面是我今天下午的遭遇:

注意main函數(shù)中,我首先申請了一塊 tc類型的對象

緊接著我把它delete 并將指向它的指針置為NULL了  

然而這時候,執(zhí)行 tc->Print()  是可以的,程序可以輸出 hello 

但如果緊接著將代碼中的2行注釋放開,也就是在類中定義一個成員對象a,并在成員方法Print中訪問這個對象,程序立馬掛掉,而這不論是g++ 還是 Visual Studio 在編譯的過程中都是不會報錯的

為什么會這樣呢?

原因很簡單

C++  銷毀一個自定義對象后,它里面的成員方法去哪兒了?

一個對象,定以后,成員對象和成員方法都存放在代碼段

一旦new 出來這個對象, 其中的成員對象是跟對象本身一起存放在堆區(qū)的,

可是,成員方法(非靜態(tài)) 依然放在代碼段

所以,在析構(gòu)、銷毀對象的時候,只會把堆中的東西,也就是成員對象delete掉,

所以這時候是能訪問進成員對象的

而C++這么做,是為了節(jié)省資源,畢竟相同類型的不同對象之間,可能又不同的成員對象,但它們的成員方法(非靜態(tài))都是可以通用的

而這個問題,編譯器目前是檢查不出來的,因為編譯器查錯是在代碼執(zhí)行前進行的,而這個問題是代碼執(zhí)行的過程中產(chǎn)生的

這種問題一旦出現(xiàn)確實不太好找,不過歸根到底 都是水平太菜啊。。


文章題目:C++銷毀一個自定義對象后,它里面的成員方法去哪兒了?
文章路徑:http://weahome.cn/article/gsdcjp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部