我在自定义容器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)
答案 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。