日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當前位置:首頁 > php開源 > php教程 > 構造、析構、拷貝語意學

構造、析構、拷貝語意學

來源:程序員人生   發(fā)布時間:2015-03-18 09:35:29 閱讀次數(shù):3078次

對象的構造

無繼承下的對象構造

引子

下面是1個定義類對象的例子:

Point global/* 全局對象 */ Point foobar() { Point local;/* 局部對象 */ Point *heap = new Point;/* 堆創(chuàng)建的對象 */ *heap = local;/* 賦值操作 */ delete heap;/* 刪除堆對象 */ return local;/* 返回局部對象 */ }

在上面的例子中,存在3種對象:全局對象、局部對象、堆對象;這些對象的生命周期是該對象的履行期屬性。全局對象的生命周期從定義開始到程序結束;局部對象的生命周期是從定義開始到局部作用域的終止;堆對象的生命周期是從new創(chuàng)建該對象開始到delete該對象;

下面根據(jù)Point類的不同聲明會表現(xiàn)出不同的行動:

與C兼容的 Plain Old Data(POD)類型

在 POD 類型中類Point聲明以下:

typedef struct{ float x, y, z; }Point;

在 POD 類型中,對象的定義不會調用 constructor 和 destructor;由于對象沒有顯示的初始化操作;

抽象數(shù)據(jù)類型(ADT)

在 ADT 類型中類Point聲明以下:

class Point{ public: Point(float x = 0.0, float y = 0.0, float z = 0.0) :_x(x), _y(y), _z(z) {} private: float _x, _y, _z; }Point;

在 ADT 類型中,創(chuàng)建對象時編譯器會調用顯示定義的構造函數(shù);

繼承體系下的對象構造

繼承體系下構造函數(shù)的調用時,編譯器會根據(jù)繼承的情況進行以下的擴充操作:

  1. member initialization list 中的 data member 會在構造函數(shù)本體中進程初始化操作,并以 members 的聲明順序進行;
  2. 若某個 member 沒有在 member initialization list 中,但是該 member 存在 default constructor,則該 member 的 default constructor 會被調用;
  3. 若 class object 存在 virtual table pointer(vptr),則必須設置 vptr 的初值,使其指向適當?shù)?virtual table;
  4. base class constructors 都會被調用,調用順序為 base class 的聲明順序;
    • 若 base class 在 member initialization list 中,則任何顯示指定的參數(shù)都應當傳遞過去;
    • 若 base class 不在 member initialization list 中,且 base class 存在 default constructor,則會調用該 default constructor;
    • 若 base class 是多重繼承下的第2或后繼的 base class,則需調劑 this 指針;
  5. 所有 virtual base class constructors 都會被調用,從左到右,從深到淺:
    • 若 class 在 member initialization list 中,則任何顯示指定的參數(shù)都應當傳遞過去;若 class 不在 member initialization list 中,且 class 存在 default constructor,則會調用該 default constructor;
    • class 中的每個 virtual base class subobject 的偏移位置必須在履行期可被存??;
    • 若 class object 是最底層的 class,其 constructor 可能會被調用;

對象的復制語意學

1個 class 在以下情況會合成默許的 從copy assignment operator:

  1. 當 class 內含1個具有 copy assignment operator 的 member object;
  2. 當 class 繼承自1個具有 copy assignment operator 的 base class;
  3. 當 class 聲明有 virtual functions;
  4. 當 class 派生自 virtual base class(es);

對象析構語意學

只有在 class 內含1個具有 destructor 的 member class 時,編譯器才會自動合成1個 destructor。

由程序員定義的 destructor 被擴大的方式類似構造函數(shù)被擴大的方式,但是順序相反:

  1. 如果對象內帶1個 vptr,那末首先重設相干的virtual table;
  2. 析構的函數(shù)本體現(xiàn)在被履行,也就是說 vptr 會在程序員的代碼履行前被重設;
  3. 如果類具有成員類對象,且該成員類對象具有析構函數(shù),那末他們會以其聲明順序的相反順序被調用;
  4. 如果有任何直接的非虛基類具有析構函數(shù),他們會以其聲明順序的相反順序被調用;
  5. 如果有任何虛基類具有析構函數(shù),而當前討論的這個類是最尾真?zhèn)€類, 那末他們會以其原來的構造順序的相反順序被調用;
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: www.伊人网 | 久久精品视频一区 | 成人久久久精品乱码一区二区三区 | 亚洲午夜在线观看 | 免费黄色网页 | 国产欧美在线观看 | 精品视频免费在线 | 88xx永久免费看大片 | 精品久久久久久国产 | 亚洲欧美激情精品一区二区 | 精品视频久久久久久久 | 欧美极品一区二区三区 | 精品一二区 | 国内一级毛片 | 97久久久久久久久久久久 | 免费视频 久久久 | 国产91av在线| 亚洲综合日韩欧美 | 国产一区二区色 | 久久国产三级 | 欧美日韩国产色综合一二三四 | 夜间av免费看精品 | 艳妇臀荡乳欲伦小说小强 | 黄色一区二区三区 | 最新中文字幕视频在线 | 欧美日韩亚洲视频 | 亚洲成人在线免费 | 在线观看国产麻豆 | www.天天干 | a爱视频 | 国产精品66 | 久久精品视频免费观看 | 国产精品去看片 | 不卡免费视频 | 欧美日韩在线视频一区二区三区 | 亚洲精品电影网在线观看 | 自拍天堂 | 99在线看 | 亚洲免费在线观看视频 | 成人欧美一区二区三区视频网页 | 日韩亚洲 |