【问题标题】:How deep do you go when performing a true "deep copy"?在执行真正的“深拷贝”时,你会走多远?
【发布时间】:2017-04-12 21:53:53
【问题描述】:

假设您有一个对象,其指针 a 指向对象 1。

我知道,如果对象 1 不是指针,则创建对象 1 的克隆,例如对象 2,并创建指向对象 2 的新指针 b。然后指针 b 就是放置在原始对象副本中的内容。

这就是深拷贝的工作原理。

如果对象 1 是指向另一个对象的指针怎么办?您是否将这两个对象都复制为深层副本?还是只是“第一级”对象?

本质上,在执行真正的深拷贝时,你会走多远?我假设您尽可能深入并复制所有内容,但我想仔细检查。

谢谢。

【问题讨论】:

    标签: pointers object deep-copy cloning


    【解决方案1】:

    原则上,真正的“深拷贝”将复制所有内容 - 递归地制作任何和所有嵌套对象的深拷贝。

    但是,这可能并不总是实用或可取的。这取决于您的具体情况:

    • 如果您的数据结构包含循环或多次引用同一个对象,您将需要以某种方式跟踪和处理此问题,否则复制将继续无限

    • 某些对象可能是“安全的”,可以通过指针引用而不创建副本(例如,如果它们是不可变的),因此复制它们可能是浪费的。您可能希望明确免除这些复制过程

    【讨论】:

    • 感谢您确认我的想法。你提出了一些我以前没有想到的有趣的案例。感谢您指出它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 2018-02-26
    • 2016-09-27
    • 1970-01-01
    • 2012-04-12
    • 2013-08-23
    • 2010-09-15
    相关资源
    最近更新 更多