c ++:为什么在这里调用构造函数

时间:2016-02-28 02:48:32

标签: c++ constructor

我在自定义容器myCont中有一个深层复制方法。我有一个未分类容器的实例,我需要对其进行排序和转储。我创建一个带有sorted标志的临时容器,调用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)  

2 个答案:

答案 0 :(得分:2)

这不是一个完整的例子,但由于你提供了程序集,我想我可以告诉你发生了什么。

sC正在转换为bool(cmp为零,然后设置为1或0)。你必须在myCont类中有一个可以从bool转换的隐式构造函数。 sC显然不是myCont类型。 sC是myCont *吗?

答案 1 :(得分:1)

您发布的一小段代码:

myCont::Copy()

这表明myCont没有返回新的srcCont对象,也无法修改Copy()对象。所以不清楚myCont dC();函数究竟应该做什么。

此外,def aprioriGen(Lk, k): #creates Ck retList = [] lenLk = len(Lk) for i in range(lenLk): for j in range(i+1, lenLk): L1 = list(Lk[i])[:k-2]; L2 = list(Lk[j])[:k-2] L1.sort(); L2.sort() if L1==L2: #if first k-2 elements are equal retList.append(Lk[i] | Lk[j]) #set union return retList l3 = [frozenset([0, 1, 2]), frozenset([0, 1, 3]), frozenset([1, 2, 4])] l4 = aprioriGen(l3, 4) print l4 most vexing parse的一个实例 - 它是一个nop。