亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

深入c++中臨時對象的析構時機的詳解

2020-01-26 16:15:12
字體:
來源:轉載
供稿:網友

c++中,臨時對象一旦不需要,就會調用析構函數,釋放其占有的資源;而具名對象則是與創建的順序相反,依次調用析構函數。

c++源碼:

復制代碼 代碼如下:

class X  {
public:
   int i;
   int j;
   ~X() {}
   X() {}

};

int main() {
    X x1;
    X();
    x1.i = 1;
    X x2;

   
}


對應的匯編碼:
復制代碼 代碼如下:

_main    PROC

; 11   : int main() {

    push    ebp
    mov    ebp, esp
    sub    esp, 24                    ; 為x1 臨時對象 x2預留24byte空間

; 12   :     X x1;

    lea    ecx, DWORD PTR _x1$[ebp];獲取x1對象的首地址,作為隱含參數傳入構造函數
    call    ??0X@@QAE@XZ                ; 為x1調用構造函數

; 13   :     X();

    lea    ecx, DWORD PTR $T2559[ebp];獲取臨時對象首地址,作為隱含參數傳入構造函數
    call    ??0X@@QAE@XZ                ; 為臨時對象調用構造函數
    lea    ecx, DWORD PTR $T2559[ebp];獲取臨時對象首地址,作為隱含參數傳入析構函數
    call    ??1X@@QAE@XZ                ; 為臨時對象調用析構函數

; 14   :     x1.i = 1;

    mov    DWORD PTR _x1$[ebp], 1;將1寫給x1首地址處內存,即將1寫入x1中的成員變量i中

; 15   :     X x2;

    lea    ecx, DWORD PTR _x2$[ebp];獲取x2的首地址,作為隱含參數傳入構造函數
    call    ??0X@@QAE@XZ                ; 為x2調用構造函數

; 16   :    
; 17   :    
; 18   : }

    lea    ecx, DWORD PTR _x2$[ebp];獲取x2的首地址,作為隱含參數傳入析構函數
    call    ??1X@@QAE@XZ                ; 為x2調用析構函數
    lea    ecx, DWORD PTR _x1$[ebp];獲取x1的首地址,作為隱含參數傳入析構函數
    call    ??1X@@QAE@XZ                ; 為x1調用析構函數
    xor    eax, eax
    mov    esp, ebp
    pop    ebp
    ret    0
_main    ENDP


從上面的匯編碼可以看出,臨時對象確實是在不需要之后就調用了析構函數,盡管它在x2對象之前被創建,但依然在x2對象之前被析構。而x1 x2析構函數調用順序,是與他們構造函數的調用順序相反。

再看下面的情況:

c++中的源碼:

復制代碼 代碼如下:

class X  {
public:
  int i;
  int j;
  int k;
  X() {}
  ~X() {}
};


int main() {
    X x1;
    X(), x1.i = 1;//這里有一條逗號運算符
    X x2;
}


這里,改造臨時對象之后,有一個逗號表達式,而不是分號。

下面是匯編碼:

復制代碼 代碼如下:

; 12   : int main() {

    push    ebp
    mov    ebp, esp
    sub    esp, 36                    ; 為x1 臨時對象 x2預留36字節的空間

; 13   :     X x1;

    lea    ecx, DWORD PTR _x1$[ebp];獲取x1的的首地址,作為隱含參數傳遞給構造函數
    call    ??0X@@QAE@XZ                ; 為x1調用構造函數

; 14   :     X(), x1.i = 1;//這里有一條逗號運算符

    lea    ecx, DWORD PTR $T2560[ebp];獲取臨時對象的首地址,作為隱含參數傳遞給構造函數
    call    ??0X@@QAE@XZ                ; 為臨時對象調用構造函數
    mov    DWORD PTR _x1$[ebp], 1;將1賦給x1首地址處的內存,即給x1的成員變量i賦值1
    lea    ecx, DWORD PTR $T2560[ebp];獲取臨時變量的首地址,作為隱含參數傳遞給析構函數
    call    ??1X@@QAE@XZ                ; 為臨時對象調用析構函數

; 15   :     X x2;

    lea    ecx, DWORD PTR _x2$[ebp];獲取x2的首地址,作為隱含參數傳遞給構造函數
    call    ??0X@@QAE@XZ                ; 為x2調用構造函數

; 16   : }

    lea    ecx, DWORD PTR _x2$[ebp];獲取x2的首地址,作為隱含參數傳遞給析構函數
    call    ??1X@@QAE@XZ                ; 為x2調用析構函數
    lea    ecx, DWORD PTR _x1$[ebp];獲取x1的首地址,作為隱含參數傳遞給析構函數
    call    ??1X@@QAE@XZ                ; 為x1調用析構函數
    xor    eax, eax
    mov    esp, ebp
    pop    ebp
    ret    0
_main    ENDP


可以看到,與第一次不同的是,臨時對象構造完畢之后,并沒有立即調用析構函數,而是執行了逗號后面的賦值語句后,才調用的析構函數。

綜上所述:

臨時對象調用析構函數的時機是一條高級語言執行完畢的時候,而一條高級語言執行完畢的標志是分號。所以,臨時對象調用析構函數的時機是碰到分號的時候

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品美女免费看| 亚洲色图欧美制服丝袜另类第一页| 亚洲人成在线免费观看| 久久青草精品视频免费观看| 国产z一区二区三区| 亚洲激情国产精品| 欧美色视频日本版| 亚洲人成在线播放| 国产有码一区二区| 日韩中文视频免费在线观看| 97在线免费观看| 亚洲国产日韩欧美在线动漫| www亚洲精品| 亚洲视频在线观看视频| 中文字幕综合在线| 欧美日韩在线一区| 91亚洲精品久久久| www国产精品com| 91在线观看免费网站| 欧美在线视频免费播放| 久久精品国产2020观看福利| 九九热这里只有在线精品视| 欧美极品少妇xxxxⅹ免费视频| 亚洲国产精品va在线看黑人动漫| 成人午夜小视频| 久久香蕉国产线看观看网| 精品久久久中文| 91精品国产91久久久久福利| 日韩av片电影专区| 亚洲女人被黑人巨大进入al| 国产精品免费在线免费| 国产一区二区三区在线免费观看| 日韩精品在线免费播放| 国内免费精品永久在线视频| 亚洲美女精品久久| 国产大片精品免费永久看nba| 成人观看高清在线观看免费| 91久久国产精品| 亚洲区一区二区| 欧美日韩一区二区三区在线免费观看| 日韩在线小视频| 欧洲亚洲免费视频| 亚洲精品久久久久久久久久久久| 亚洲黄色成人网| 精品视频在线播放免| 国产一区私人高清影院| 亚洲精品一区中文字幕乱码| 欧美在线视频在线播放完整版免费观看| 成人免费福利在线| 亚洲人午夜色婷婷| 欧美综合在线第二页| 国产在线精品一区免费香蕉| 日韩美女中文字幕| 一区二区三区四区视频| 亚洲最新av网址| 国产在线999| 国产日产亚洲精品| 日韩一区二区福利| 中文字幕亚洲无线码a| 久久久久国产一区二区三区| 久久精品99久久久香蕉| 亚洲国产成人一区| 91精品国产综合久久香蕉| 欧美日韩国产一区二区三区| 97视频在线观看免费| 国产精品女人网站| 国产精品第七影院| 一区二区中文字幕| 日韩在线视频国产| 97超级碰碰碰久久久| 亚洲成人av中文字幕| 久久久久国色av免费观看性色| 国产日韩欧美自拍| 日本久久中文字幕| 丝袜亚洲另类欧美重口| 久久艳片www.17c.com| 91av国产在线| 国产精品美乳一区二区免费| 正在播放国产一区| 美日韩精品免费视频| 亚洲色图欧美制服丝袜另类第一页| 国产精品永久免费视频| 日韩福利视频在线观看| 国产一区二区丝袜高跟鞋图片| 国产精品看片资源| 2019亚洲男人天堂| www高清在线视频日韩欧美| 中文字幕国产亚洲| 欧美另类在线播放| 欧美性猛交xxxx偷拍洗澡| 亚洲免费av片| 国产精品视频一区国模私拍| 久久视频免费在线播放| 美日韩精品免费视频| 日产精品久久久一区二区福利| 91色精品视频在线| 欧美大全免费观看电视剧大泉洋| 97国产成人精品视频| 国产精品人成电影| 久久理论片午夜琪琪电影网| 日韩一区二区久久久| 2023亚洲男人天堂| 91香蕉嫩草影院入口| 午夜剧场成人观在线视频免费观看| 91免费视频网站| 在线观看国产精品日韩av| 国产精品久久久久久中文字| 日本久久久久亚洲中字幕| 国产美女精彩久久| 疯狂做受xxxx欧美肥白少妇| 精品亚洲va在线va天堂资源站| 黄色一区二区在线观看| 国产精品草莓在线免费观看| 精品日本高清在线播放| 日韩在线中文字幕| 色与欲影视天天看综合网| 中文字幕一区二区三区电影| 亚洲摸下面视频| 欧美激情一二区| 久久人91精品久久久久久不卡| 国产成人+综合亚洲+天堂| 国产成人精品电影| 国产精品直播网红| 国产日韩在线看片| 91po在线观看91精品国产性色| 久久久久久久久久久网站| 最新91在线视频| 欧美最猛性xxxxx免费| 欧美最顶级的aⅴ艳星| 久久久久久久久久国产| 国产一区二区在线播放| 亚洲aⅴ男人的天堂在线观看| 欧美在线性视频| 亚洲成人xxx| 日韩电视剧免费观看网站| 亚洲最新av在线网站| 久久久久久久久久久亚洲| 亚洲精品视频免费| 欧美黑人性猛交| 久久久天堂国产精品女人| 亚洲国产精品人久久电影| 国产一区二区三区中文| 2020欧美日韩在线视频| 爱福利视频一区| 午夜精品一区二区三区在线播放| 九九久久久久99精品| 97欧美精品一区二区三区| 亚洲午夜精品久久久久久性色| 亚洲成人网久久久| 亚洲欧美激情视频| 日韩视频―中文字幕| 国产精品露脸av在线| www.国产一区| 97精品一区二区视频在线观看| 亚洲天堂男人的天堂| 久久99久久久久久久噜噜| 国产色婷婷国产综合在线理论片a| 欧美另类极品videosbestfree| 亚洲成人三级在线| 亚洲黄色av女优在线观看| 日韩大片免费观看视频播放| 亚洲一区二区三区777| 国产精品精品视频一区二区三区| 国产精品久久久久久久美男|