如何从链表创建复制构造函数

时间:2015-03-22 17:33:24

标签: c++ constructor linked-list copy-constructor

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

主要

#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;  

 };

2 个答案:

答案 0 :(得分:1)

你的拷贝构造函数没有复制任何东西,更糟糕的是它被卡在递归循环中。它需要看起来更像这样:

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类,而不是手动编写自己的链表。

答案 1 :(得分:0)

您的复制构造函数中存在多个错误。

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

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

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

list L1;

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

list L2(L1);

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