我在自定義容器中有深度複製方法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)
是的,sC是一個指向myCont實例的指針。 – user1409254
然後你可能想要dC.Copy(* sC);而且,如果您希望編譯器提供幫助,請將'explicit'放在任何允許您從bool轉換爲myCont的前面。我假設你有一個構造函數'myCont(bool x)',可以是'顯式myCont(bool x)'。' (只是猜測...) –
就是這樣!非常感謝。是的,有一個myCont構造函數(布爾)。 – user1409254