【问题标题】:Is my code creating a deep or shallow copy of my object?我的代码是创建对象的深层还是浅层副本?
【发布时间】:2015-01-10 04:22:46
【问题描述】:

我有这段代码,它采用一个由外部指针和带有链表的内部指针组成的堆栈,但我不知道它是在进行深拷贝还是浅拷贝。如果我没有足够的信息,我很抱歉,我认为这是你需要告诉的。谢谢!

void StackClass::operator =(const StackClass& orig)
{
    //stack = nullptr;
    node* temp = orig.stack;
    if (!orig.IsEmpty())
    {
        while (temp != NULL)
        {
            stack = orig.stack;    // sets thew new stack equal to the old stack's value
            temp = temp->next;
        } // end while loop
    } // end if
    else
    {
        stack = nullptr;          // sets it to an empty list because there's no values
    } // end else
}

【问题讨论】:

  • 如果stack 只是一个指针,那么它所做的就是复制指针。
  • @JonathanPotter 它只是一个指针,所以我不会做一个深拷贝我会假设
  • 代码一团糟。首先,在尝试从orig 复制任何内容之前,它需要delete 对象堆栈中的任何现有元素,然后再尝试从orig 复制任何内容。要进行深度复制,必须对new 进行一些调用(即使通过调用 news) 的其他函数间接调用 - 显然,如果 stack 确实是 node*,则这段代码不会做类似的事情。

标签: c++ pointers linked-list deep-copy


【解决方案1】:

在这种情况下,它只是复制指针,即浅拷贝生效。

深拷贝意味着您显式地为新指针分配内存并将传入指针的内容存储到您的代码恰好丢失的内容中,而不仅仅是复制指针...

【讨论】:

  • 所以我必须复制每个链表数据中的所有值并将其放入新的?
  • 我的堆栈由结构组成,其中一个带有“数据”,另一个是 node* next,它可以让您到达列表中的下一个值。指针栈指向栈顶
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-31
  • 2012-01-02
  • 2023-03-05
  • 1970-01-01
  • 2012-05-16
  • 1970-01-01
  • 2022-11-25
相关资源
最近更新 更多