c++ - 如何从喜欢的列表中制作复制构造函数

标签 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;  

 };

最佳答案

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

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

关于c++ - 如何从喜欢的列表中制作复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29197567/

相关文章:

c++ - 在不失去对其构造函数的访问的情况下稍微派生一个类

c - 如何在链表中将节点从头移动到尾? C

c++ - openCV 2.4.3 iOS 框架编译器无法识别某些 C++ header

c++ - openGL 每秒平均帧数是多少

javascript - 如何在 JavaScript 中将变量传递给新对象?

java - LinkedLIst indexOf递归实现

java - 链表的递归

c++ - 随机高斯函数的时间复杂度

c++ - 结构的内存分配问题

java - 为什么需要一个无参数的构造函数来运行这个简单的 Spring 配置?