如何从点赞列表中创建一个复制构造函数

How to make a copy constructor from a liked list

本文关键字:一个 构造函数 复制 创建 列表      更新时间:2023-10-16

我有一个程序,我正在尝试制作一个复制构造函数,并在程序结束时显示我复制的内容。问题是它没有显示,而是给了我Segmentation fault (core dumped)。我只想给出我制作复制构造函数的部分。如果你需要更多的代码,请告诉我。

main

#include "list.h"
int main()
{
list newlist(mylist);
newlist.displayList();
}

list.cpp

#include "list.h"
list::list()
{
head=NULL;
}
list::~list()//deconstructed 
{
  while (head != NULL)
  {
   deleteElement(head->item); //delete next element
  }
}   
list::list(const list&)//copy constructor
{
list L1;
list L2(L1);
}

list.h

class list
{
  public:
   list();
   ~list();
   list(const list&);
  private:
   node *head;  
 };

您的复制构造函数没有复制任何内容,更糟糕的是,它陷入了递归循环。它需要看起来更像这样:

list::list(const list &src)//copy constructor
    : head(NULL)
{
    node *srcnode = src.head;
    node *prev = NULL;
    while (srcnode != NULL)
    {
         node *newnode = new node;
         newnode->item = srcnode->item;
         if (!head) head = newnode;
         if (prev) prev->next = newnode;
         prev = newnode;
         srcnode = srcnode->next;
    }
}

话虽如此,您确实应该使用std::list类,而不是手动编写自己的链表。

复制构造函数中有几个错误。

在这里,您没有命名或使用应该复制的const list&

list::list(const list&)//copy constructor

在这里,您正在创建一个新的空列表。

list L1;

在这里,您试图在复制构造函数的定义中调用复制构造函数

list L2(L1);

最终的结果是,复制构造函数创建了一个新的空列表,然后再次调用复制构造函数。试图永远重复。

相关文章: