最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解析c++中參數(shù)對(duì)象與局部對(duì)象的析構(gòu)順序的詳解

 更新時(shí)間:2013年05月13日 09:03:54   作者:  
本篇文章是對(duì)c++中參數(shù)對(duì)象與局部對(duì)象的析構(gòu)順序進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下

下面是c++的源碼:

復(fù)制代碼 代碼如下:

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

};
void f(X x) {
  X x1;
  x.i = 1;
  x.j = 2;

}
int main() {
    f(X());
}


下面是main函數(shù)的匯編碼:
復(fù)制代碼 代碼如下:

_main    PROC

; 15   : int main() {

    push    ebp
    mov    ebp, esp
    sub    esp, 8;為臨時(shí)對(duì)象預(yù)留8byte空間,由于沒有顯示定義構(gòu)造函數(shù),
              ;而且這種情況下編譯器提供無用的默認(rèn)構(gòu)造函數(shù),因此看不到構(gòu)造函數(shù)的調(diào)用

; 16   :     f(X());

    mov    eax, DWORD PTR $T2560[ebp+4];將偏移臨時(shí)變量的首地址4byte處內(nèi)存中內(nèi)容給eax,即將臨時(shí)變量的成員變量j值給eax
    push    eax;將eax壓棧
    mov    ecx, DWORD PTR $T2560[ebp];將臨時(shí)變量首地址中的內(nèi)容給ecx,即將臨時(shí)變量中的成員變量i值給ecx
    push    ecx;將ecx壓棧
               ;上面四句創(chuàng)建了臨時(shí)變量的一份拷貝,作為參數(shù)調(diào)用f
    call    ?f@@YAXVX@@@Z                ; 調(diào)用函數(shù)f
    add    esp, 8;將棧頂指針下移8byte,釋放為參數(shù)對(duì)象的提供的??臻g
    lea    ecx, DWORD PTR $T2560[ebp];將臨時(shí)對(duì)象的首地址給ecx
    call    ??1X@@QAE@XZ                ; 為臨時(shí)對(duì)象調(diào)用析構(gòu)函數(shù)

; 17   : }

    xor    eax, eax
    mov    esp, ebp
    pop    ebp
    ret    0
_main    ENDP



從上面可以看出,產(chǎn)生的臨時(shí)對(duì)象在函數(shù)調(diào)用完成退出后才調(diào)用析構(gòu)函數(shù)。

下面是f函數(shù)的匯編碼:

復(fù)制代碼 代碼如下:

?f@@YAXVX@@@Z PROC                    ; f

; 9    : void f(X x) {

    push    ebp
    mov    ebp, esp
    sub    esp, 8;為局部對(duì)象x1預(yù)留8byte的空間

; 10   :   X x1;
; 11   :   x.i = 1;

    mov    DWORD PTR _x$[ebp], 1;把1寫給參數(shù)對(duì)象首地址處,即把1寫入?yún)?shù)對(duì)象的成員變量i

; 12   :   x.j = 2;

    mov    DWORD PTR _x$[ebp+4], 2;把2寫入偏移參數(shù)對(duì)象首地址4byte處的內(nèi)存,即把2寫入?yún)?shù)對(duì)象的成員變量j

; 13   :    
; 14   : }

    lea    ecx, DWORD PTR _x1$[ebp];將局部變量x1的首地址給ecx
    call    ??1X@@QAE@XZ                ; 為x1調(diào)用析構(gòu)函數(shù)
    lea    ecx, DWORD PTR _x$[ebp];將參數(shù)對(duì)象的首地址給ecx
    call    ??1X@@QAE@XZ                ; 為參數(shù)對(duì)象調(diào)用析構(gòu)函數(shù)
    mov    esp, ebp
    pop    ebp
    ret    0
?f@@YAXVX@@@Z ENDP                    ; f
; Function compile flags: /Odtp
_TEXT    ENDS
;    COMDAT ??1X@@QAE@XZ
_TEXT    SEGMENT
_this$ = -4                        ; size = 4
??1X@@QAE@XZ PROC                    ; X::~X, COMDAT
; _this$ = ecx

; 6    :    ~X() {}

    push    ebp
    mov    ebp, esp
    push    ecx
    mov    DWORD PTR _this$[ebp], ecx
    mov    esp, ebp
    pop    ebp
    ret    0
??1X@@QAE@XZ ENDP


從上面的代碼可以看出,參數(shù)對(duì)象和局部對(duì)象都是在函數(shù)退出之前調(diào)用析構(gòu)函數(shù)。并且參數(shù)對(duì)象在局部對(duì)象調(diào)用析構(gòu)函數(shù)之后再調(diào)用自己的析構(gòu)函數(shù)。

相關(guān)文章

  • C語言實(shí)現(xiàn)單鏈表的快速排序算法

    C語言實(shí)現(xiàn)單鏈表的快速排序算法

    大家好,本篇文章主要講的是C語言實(shí)現(xiàn)單鏈表的快速排序算法,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • C++的頭文件和實(shí)現(xiàn)文件詳解

    C++的頭文件和實(shí)現(xiàn)文件詳解

    這篇文章主要介紹了C++的頭文件和實(shí)現(xiàn)文件詳解的相關(guān)資料,需要的朋友可以參考下
    2015-01-01
  • LoadLibrary深入案例詳解

    LoadLibrary深入案例詳解

    這篇文章主要介紹了LoadLibrary深入案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C++指向類成員的指針詳解

    C++指向類成員的指針詳解

    指向類成員的指針總的來講可以分為兩大類四小類(指向數(shù)據(jù)成員還是成員函數(shù),指向普通成員還是靜態(tài)成員),希望本片文章能給你帶來幫助
    2021-09-09
  • C語言實(shí)現(xiàn)掃雷小游戲的示例代碼

    C語言實(shí)現(xiàn)掃雷小游戲的示例代碼

    這篇文中主要為大家詳細(xì)介紹了如何利用C語言實(shí)現(xiàn)經(jīng)典的掃雷小游戲。掃雷小游戲主要是利用字符數(shù)組、循環(huán)語句和函數(shù)實(shí)現(xiàn),感興趣的小伙伴可以了解一下
    2022-10-10
  • C++之std::vector刪除元素的幾種方式及區(qū)別說明

    C++之std::vector刪除元素的幾種方式及區(qū)別說明

    這篇文章主要介紹了C++之std::vector刪除元素的幾種方式及區(qū)別說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 純C語言:分治快速排序源碼分享

    純C語言:分治快速排序源碼分享

    這篇文章主要介紹了分治快速排序源碼,有需要的朋友可以參考一下
    2014-01-01
  • VC中實(shí)現(xiàn)GB2312、BIG5、Unicode編碼轉(zhuǎn)換的方法

    VC中實(shí)現(xiàn)GB2312、BIG5、Unicode編碼轉(zhuǎn)換的方法

    這篇文章主要介紹了VC中實(shí)現(xiàn)GB2312、BIG5、Unicode編碼轉(zhuǎn)換的方法,該功能非常實(shí)用,需要的朋友可以參考下
    2014-07-07
  • C++實(shí)現(xiàn)LeetCode(118.楊輝三角)

    C++實(shí)現(xiàn)LeetCode(118.楊輝三角)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(118.楊輝三角),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • c異或運(yùn)算 c異或運(yùn)算符號(hào)

    c異或運(yùn)算 c異或運(yùn)算符號(hào)

    位運(yùn)算的運(yùn)算分量只能是整型或字符型數(shù)據(jù),位運(yùn)算把運(yùn)算對(duì)象看作是由二進(jìn)位組成的位串信息,按位完成指定的運(yùn)算,得到位串信息的結(jié)果
    2014-06-06

最新評(píng)論

论坛| 简阳市| 米脂县| 宁晋县| 泌阳县| 浮山县| 鄂托克旗| 宜黄县| 工布江达县| 三门县| 安丘市| 武隆县| 定兴县| 固原市| 杨浦区| 固安县| 财经| 灵丘县| 读书| 平塘县| 古交市| 南郑县| 平顺县| 南充市| 东丽区| 三河市| 额济纳旗| 西安市| 大宁县| 丽江市| 聂荣县| 贵德县| 平邑县| 商南县| 浏阳市| 桐乡市| 台北市| 信宜市| 蓬溪县| 西丰县| 西和县|