我在自定义容器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 *?

09-11 19:30