我目前正在为Linked List类实现一个拷贝构造函数.当我使用另一个链接列表作为参数创建类的新实例时,正在为我作为参数传递的对象调用构造函数.这让我感到困惑,无法相信.以下是了解主方法中发生的事情所需的部分:
int main()
{
LinkedList ll;
LinkedList ll2(ll);
}
Run Code Online (Sandbox Code Playgroud)
因此,不是为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();
}
Run Code Online (Sandbox Code Playgroud)
如果这最终成为一个简单的问题我很抱歉 - 我对C++很新.任何帮助将不胜感激!
LinkedList ll = LinkedList();
Run Code Online (Sandbox Code Playgroud)
这将创建一个链接列表实例,然后复制构造此实例.这看起来像Java或C#-ism.它实际上相当于:
LinkedList ll(LinkedList());
Run Code Online (Sandbox Code Playgroud)
要创建一个空链表,只需写:
LinkedList ll;
Run Code Online (Sandbox Code Playgroud)
这将隐式调用默认构造函数.
此外,请确保您具有默认构造函数,该构造函数正确初始化链表以清空.如果你没有,那么列表的变量将以堆栈中的任何垃圾值结束.