我在自定义容器myCont
中有一个深层复制方法。我有一个需要排序和转储的未排序容器的实例。我创建一个带有排序标志的临时容器,调用copy方法和Dump。但是下面的应用程序代码会创建一个空容器,然后传递该容器,而不是传递我的(已加载)容器。需要帮助弄清楚这里发生了什么。提前致谢
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正在转换为布尔值(cmp为零,然后设置为1或零)。在myCont类中必须具有可以从bool转换的隐式构造函数。 sC显然不是myCont类型。 sC是否是myCont *?