gpt4 book ai didi

c++ - 在错误的对象上调用复制构造函数

转载 作者:太空狗 更新时间:2023-10-29 23:42:32 26 4
gpt4 key购买 nike

我目前正在为链表类实现复制构造函数。当我使用另一个链表作为参数创建该类的新实例时,正在为我作为参数传递的对象调用构造函数。这让我感到困惑,难以置信。这是了解主要方法中发生的事情所必需的部分:

int main()
{
LinkedList ll;
LinkedList ll2(ll);
}

因此,不是调用 ll2 的复制构造函数,而是调用 ll 的复制构造函数。在尝试将 ll 复制到新的 LinkedList(即 ll2)之前,我已经确认 ll 的大小正确为 3。虽然在复制之后,两者的大小相同,都大于 3,但更奇怪的是,调用的是 ll 的复制构造函数,而不是 ll2 的复制构造函数。因为我使用的是 VC++,所以我已经通过程序来确认这一点。

这是 LinkedList 类的复制构造函数:

LinkedList::LinkedList(const LinkedList & other)        
{
LLNode *otherCurNode = other.GetFirst();
if (otherCurNode != NULL)
{
front = new LLNode(otherCurNode->GetValue(), NULL, NULL);
back = front;
}
else
{
front = NULL;
back = NULL;
}
LLNode *curNode = front;
while (otherCurNode != NULL)
{
Insert(otherCurNode->GetValue(), curNode);
curNode = curNode->GetNext();
otherCurNode = otherCurNode->GetNext();
back = curNode;
}
numNodes = other.GetSize();
}

如果这最终成为一个简单的问题,我深表歉意 - 我是 C++ 的新手。任何帮助将不胜感激!

最佳答案

LinkedList ll = LinkedList();

这将创建一个链表实例,然后复制构造该实例。这看起来像 Java 或 C#-ism。它实际上等同于:

LinkedList ll(LinkedList());

要创建一个空链表,只需写:

LinkedList ll;

这将隐式调用默认构造函数。

此外,请确保您确实有一个默认构造函数,它正确地将链表初始化为空。如果您没有,那么列表的变量将以堆栈中的任何垃圾值结束。

关于c++ - 在错误的对象上调用复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3809530/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com