我在自定义容器中有深度复制方法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