2016-02-28 91 views
0

我在自定義容器中有深度複製方法myCont。我有一個我需要排序和轉儲的未排序容器的實例。我創建一個帶有排序標誌的臨時容器,調用複製方法和轉儲。但下面的應用程序代碼創建一個空的容器並傳遞它,而不是我的(加載的)容器。需要幫助弄清楚這裏發生了什麼。在此先感謝C++:爲什麼在這裏調用構造函數

void myCont::Copy(const myCont& srcCont) 
{ 
    // code to deep copy from srcCont 
} 

應用代碼:

fn(x, z, z) { 
    myCont dC(); 
    dC.setSorted(true); 
    dC.Copy(sC); 
    dC.DumpCont(); 
} 

大會:

myCont dC(); 
0000000140323068 mov   dl,1 
000000014032306A lea   rcx,[dC] 
0000000140323072 call  myCont::myCont (0141E1A01Ah) 
0000000140323077 nop 
     dSet.Copy(sC); 
0000000140323078 cmp   qword ptr [sC],0 
0000000140323081 je   CR::evaluate+6FDh (014032308Dh) 
0000000140323083 mov   byte ptr [rsp+0C2h],1 
000000014032308B jmp   CR::evaluate+705h (0140323095h) 
000000014032308D mov   byte ptr [rsp+0C2h],0 
0000000140323095 movzx  edx,byte ptr [rsp+0C2h] 
000000014032309D lea   rcx,[rsp+6F0h] 
00000001403230A5 call  myCont::myCont (0141E1A01Ah) <-WHY THIS CTROL CALL ???????????? 
00000001403230AA nop 
00000001403230AB lea   rdx,[rsp+6F0h] 
00000001403230B3 lea   rcx,[dC] 
00000001403230BB call  myCont::Copy (0141E1A188h) 
00000001403230C0 nop 
00000001403230C1 lea   rcx,[rsp+6F0h] 
00000001403230C9 call  myCont::~my Cont(0140009280h) 
     dC.DumpCont(); 
00000001403230CE lea   rcx,[dC] 
00000001403230D6 call  myCont::DumpCont(014019B240h) 

回答

2

這不是一個完整的例子,但因爲你提供的程序集,我想我可以告訴是什麼繼續。

sC轉換爲bool(cmp爲零,然後設置一個或零)。你必須在myCont類中有一個可以從一個bool轉換而來的隱式構造函數。 sC顯然不是類型myCont。 sC是否是myCont *?

+0

是的,sC是一個指向myCont實例的指針。 – user1409254

+0

然後你可能想要dC.Copy(* sC);而且,如果您希望編譯器提供幫助,請將'explicit'放在任何允許您從bool轉換爲myCont的前面。我假設你有一個構造函數'myCont(bool x)',可以是'顯式myCont(bool x)'。' (只是猜測...) –

+0

就是這樣!非常感謝。是的,有一個myCont構造函數(布爾)。 – user1409254

1

從代碼的點點你貼:

void myCont::Copy(const myCont& srcCont) 
{ 
    // code to deep copy from srcCont 
} 

這表明myCont::Copy()不返回新myCont對象,它不能修改srcCont對象。所以目前還不清楚Copy()函數實際上應該做什麼。

另外,myCont dC();most vexing parse的一個實例 - 它是一個nop。

相關問題