成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

透析C++類對(duì)象的內(nèi)存模型

開(kāi)發(fā) 后端
下文著重介紹在C++語(yǔ)言中,如果類中有虛函數(shù),那么它就會(huì)有一個(gè)虛函數(shù)表的指針,在類對(duì)象最開(kāi)始的內(nèi)存數(shù)據(jù)中出現(xiàn)。

雖然有許多人對(duì)C++類對(duì)象表示懷疑,但在年復(fù)一年的不斷發(fā)展中,他的使用率也在不斷提高。如過(guò)要想對(duì)C++類對(duì)象充分了解,但前提是要深入理解到底什么是C++類對(duì)象,及他是怎么運(yùn)作的。

首先介紹一下C++中有繼承關(guān)系的類對(duì)象內(nèi)存的布局:在C++中,如果類中有虛函數(shù),那么它就會(huì)有一個(gè)虛函數(shù)表的指針__vfptr,在類對(duì)象最開(kāi)始的內(nèi)存數(shù)據(jù)中。之后是類中的成員變量的內(nèi)存數(shù)據(jù)。

對(duì)于子類,最開(kāi)始的內(nèi)存數(shù)據(jù)記錄著父類對(duì)象的拷貝(包括父類虛函數(shù)表指針和成員變量)。 之后是子類自己的成員變量數(shù)據(jù)。對(duì)于子類的子類,也是同樣的原理。但是無(wú)論繼承了多少個(gè)子類,對(duì)象中始終只有一個(gè)虛函數(shù)表指針。

為了探討C++類對(duì)象的內(nèi)存布局,先來(lái)寫(xiě)幾個(gè)類和函數(shù)首先寫(xiě)一個(gè)基類:然后,我們多種不同的繼承情況來(lái)研究子類的內(nèi)存對(duì)象結(jié)構(gòu)。

1. 無(wú)虛函數(shù)集繼承

  1.  //子類1,無(wú)虛函數(shù)重載     
  2. class Child1 : public Base     
  3. {     
  4. public:     
  5. virtual void f1() { cout << "Child1::f1" << endl; }     
  6. virtual void g1() { cout << "Child1::g1" << endl; }     
  7. virtual void h1() { cout << "Child1::h1" << endl; }     
  8. int child1;     
  9. protected:     
  10. private:     
  11. };   

2. 有一個(gè)虛函數(shù)繼承

  1.  //子類1,無(wú)虛函數(shù)重載     
  2. class Child1 : public Base     
  3. {     
  4. public:     
  5. virtual void f1() { cout << "Child1::f1" << endl; }     
  6. virtual void g1() { cout << "Child1::g1" << endl; }     
  7. virtual void h1() { cout << "Child1::h1" << endl; }     
  8. int child1;     
  9. protected:     
  10. private:     
  11. };   

虛擬繼承的子類的內(nèi)存結(jié)構(gòu),和普通繼承完全不同。虛擬繼承的子類,有單獨(dú)的虛函數(shù)表, 另外也單獨(dú)保存一份父類的虛函數(shù)表,兩部分之間用一個(gè)四個(gè)字節(jié)的0x00000000來(lái)作為分界。

子類的內(nèi)存中,首先是自己的虛函數(shù)表,然后是子類的數(shù)據(jù)成員,然后是0x0,之后就是父類的虛函數(shù)表,之后是父類的數(shù)據(jù)成員。如果子類沒(méi)有自己的虛函數(shù),那么子類就不會(huì)有虛函數(shù)表,但是子類數(shù)據(jù)和父類數(shù)據(jù)之間,還是需要0x0來(lái)間隔。

因此,在虛擬繼承中,子C++類對(duì)象和父類的數(shù)據(jù),是完全間隔的。存放子類自己的虛函數(shù)表和數(shù)據(jù),中間以0x分界,最后保存父類的虛函數(shù)和數(shù)據(jù)。如果子類重載了父類的虛函數(shù),那么則將子類內(nèi)存中父類虛函數(shù)表的相應(yīng)函數(shù)替換。

【編輯推薦】

  1. 簡(jiǎn)介學(xué)習(xí)C++總結(jié)之談
  2. 對(duì)C++庫(kù)函數(shù)進(jìn)行學(xué)習(xí)探索總結(jié)筆記
  3. C++類庫(kù)設(shè)計(jì)的基本構(gòu)思與方法
  4. C++語(yǔ)言真的還有市場(chǎng)價(jià)值?
  5. C++類庫(kù)設(shè)計(jì)的基本構(gòu)思與方法
責(zé)任編輯:chenqingxiang 來(lái)源: pcppc.cn
相關(guān)推薦

2011-06-21 10:17:41

c++內(nèi)存模型

2010-01-28 13:45:06

C++數(shù)組

2010-01-18 09:39:25

C++語(yǔ)言

2010-01-19 14:28:41

C++ main()函

2010-01-22 13:45:36

C++代碼

2010-01-21 10:04:14

C++語(yǔ)言

2010-01-20 14:13:33

C++變量

2010-01-25 14:18:46

C++對(duì)象模型

2020-10-23 18:46:58

C++程序類別

2010-01-27 10:13:22

C++類對(duì)象

2011-07-20 13:40:09

拷貝構(gòu)造函數(shù)

2011-06-01 10:19:41

基類對(duì)象派生類對(duì)象

2024-07-25 14:18:29

2010-01-21 13:33:44

C++基類

2011-04-11 09:47:50

C++內(nèi)存管理

2010-01-15 18:35:25

C++的類

2010-01-28 13:27:12

C++類定義

2009-08-28 09:43:05

C#事件

2010-01-21 13:48:30

C++基類

2024-12-11 08:00:00

移動(dòng)語(yǔ)義C++
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧美久久影院 | 国产精品亚洲一区二区三区在线观看 | h小视频| 丁香综合| 欧美成年网站 | 天天拍天天操 | 久久一日本道色综合久久 | 91视频在线看 | 色伊人久久 | 婷婷色国产偷v国产偷v小说 | 日韩欧美专区 | 韩国成人在线视频 | 91国产在线播放 | 中文字幕精品一区久久久久 | 欧美一区成人 | 久久久999国产精品 中文字幕在线精品 | 自拍偷拍亚洲视频 | 国产不卡一区 | 国产一区不卡 | 一区二区免费在线观看 | 精品一区二区三区免费视频 | 日本亚洲一区 | 亚洲一二三区在线观看 | 一级毛片播放 | 91 久久 | 在线观看国产视频 | 色婷婷亚洲国产女人的天堂 | 久久精品国产免费看久久精品 | 综合久久综合久久 | 秋霞a级毛片在线看 | 日韩一区二区三区在线播放 | 国产精品视频一区二区三区不卡 | 精品美女 | 黄色大片网站 | 日本精品久久 | 三极网站| 亚欧精品 | 午夜精品三区 | 国产精品区二区三区日本 | 午夜视频在线免费观看 | 天天看天天干 |