第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

成員構造函數(shù)和析構函數(shù)調用的順序

成員構造函數(shù)和析構函數(shù)調用的順序

C++
繁星點點滴滴 2019-12-26 11:11:01
哦,C ++專家們,我尋求您的智慧。與我說標準話,并告訴我C ++是否保證以下程序:#include <iostream>using namespace std;struct A{    A() { cout << "A::A" << endl; }    ~A() { cout << "A::~" << endl; }};struct B{    B() { cout << "B::B" << endl; }    ~B() { cout << "B::~" << endl; }};struct C{    C() { cout << "C::C" << endl; }    ~C() { cout << "C::~" << endl; }};struct Aggregate{    A a;    B b;    C c;};int main(){    Aggregate a;    return 0;}將永遠產生A::AB::BC::CC::~B::~A::~換句話說,是否保證成員按聲明順序初始化并以相反的順序銷毀?
查看完整描述

3 回答

?
慕雪6442864

TA貢獻1812條經驗 獲得超5個贊

換句話說,是否保證成員按聲明順序初始化并以相反的順序銷毀?

雙方都同意。見12.6.2

6初始化應按以下順序進行:

  • 首先,并且僅對于如下所述的最大派生類的構造函數(shù),虛擬基類應按照它們在基類的有向無環(huán)圖的深度優(yōu)先從左到右遍歷時出現(xiàn)的順序進行初始化,其中“左“從右到右”是基類名稱在派生類base-specifier-list中的出現(xiàn)順序。

  • 然后,直接基類應按照它們出現(xiàn)在base-specifier-list中的聲明順序進行初始化(與mem-initializers的順序無關)。

  • 然后,非靜態(tài)數(shù)據(jù)成員應按照它們在類定義中聲明的順序進行初始化(同樣,無論mem-initializer的順序如何)。

  • 最后,執(zhí)行構造函數(shù)主體的復合語句。[注意:聲明順序是強制執(zhí)行的,以確保以相反的初始化順序銷毀基礎和成員子對象?!沧


查看完整回答
反對 回復 2019-12-26
?
大話西游666

TA貢獻1817條經驗 獲得超14個贊

是的,它們是(是非靜態(tài)成員)。初始化(構造)請參見12.6.2 / 5,銷毀請參見12.4 / 6。


查看完整回答
反對 回復 2019-12-26
?
POPMUISE

TA貢獻1765條經驗 獲得超5個贊

是的,該標準保證對象以與創(chuàng)建對象相反的順序被破壞。原因是一個對象可能使用另一個對象,因此依賴于它。考慮:


struct A { };


struct B {

 A &a;

 B(A& a) : a(a) { }

};


int main() {

    A a;

    B b(a);

}

如果a是之前破壞b,然后b將舉行無效成員引用。通過以創(chuàng)建對象的相反順序破壞對象,我們保證正確破壞。


查看完整回答
反對 回復 2019-12-26
  • 3 回答
  • 0 關注
  • 613 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號