【问题标题】:linkList copy constructor and assignment operatorlinkList 复制构造函数和赋值运算符
【发布时间】:2013-04-13 13:04:17
【问题描述】:

我正在编写我的节点和列表类,一切正常,除非我在列表类中包含析构函数、复制构造函数和赋值运算符函数,而且我不知道它们有什么问题或我错过了什么不包括在内。

linklist::linklist()
    :firstNode(NULL),
    lastNode(NULL),
    nodeCount(0) {}

linklist::~linklist()// destructor
{
    node* current = firstNode;
    while( current != 0 ) {
        node* temp = current->getNextNode();
        delete current;
        current = temp;
    }
    firstNode = 0;
}

linklist::linklist(linklist &L)// copy constructor
{
    firstNode = NULL;
    nodeCount = 0;
    node* temp = L.firstNode;
    for(int i = 0; i < L.getNodeCount(); i++)
    {
        push_back(temp);
        temp = temp->getNextNode();
    }
}

linklist& linklist::operator=(const linklist& L)// overloading assignemnt operator
{
    linklist* LL;
    node* temp = L.firstNode;
    while( temp != NULL ) {
        LL->getLast();
        temp = temp -> getNextNode();
    }
    return *LL;
}

【问题讨论】:

  • 编译错误?段错误?不正确的行为?请澄清什么不起作用并包含发生错误的代码。
  • 是的,这是一个编译错误中断并且什么都不显示!

标签: c++ copy-constructor


【解决方案1】:

您的分配应该类似于您的复制构造函数。因为他们都做几乎相同的事情。

不同之处在于您在开始复制 rhs(另一个)之前应该 clear 列表(本身)中的内容。

然后它应该返回对自身的引用。 return *this。这样可以链接分配。

linklist& linklist::operator=(const linklist& L)// overloading assignemnt operator
{
    // Check if self assignment
    if (&L == this)
       return *this;

    // clear myself.
    // copy other.
    return *this;
}

【讨论】:

  • 在开始时,您应该添加一个检查以确保您没有将相同的 RHS 分配给 LHS(即 if (&amp;L == this) then return *this; )。在引用的情况下,这可能会在不经意间发生。
  • 谢谢大家,我正在努力,让我们看看它会如何工作!
【解决方案2】:

您似乎有两个问题。首先,析构函数删除所有节点结构。一旦原始链表被销毁,任何使用复制构造函数复制的新链表都会有不正确的数据。其次,使用其复制构造函数复制节点结构可能会更好。没有确切信息很难说,但您的链表 ctor 可能类似于:

firstNode = NULL;
nodeCount = 0;
node* temp = L.firstNode;
for(int i = 0; i < L.getNodeCount(); i++)
{
    push_back(new node(*temp));
    temp = temp->getNextNode();
}

这样新的链表就有了自己的节点副本。

【讨论】:

  • 谢谢,我已经做到了,但还是有问题,还在努力寻找!
猜你喜欢
  • 2011-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多