【问题标题】:Writing a deep copy - copying pointer value写深拷贝——拷贝指针值
【发布时间】:2010-12-28 13:26:52
【问题描述】:

在为一个包含指向动态分配内存的指针的类编写复制构造函数时,我有一个问题。

如何指定我希望从对象复制的指针的值复制到复制到对象的指针。显然这样的事情是行不通的......

*foo = *bar.foo;

因为,bar 对象正在被删除(首先复制对象的目的),而这只是将复制到对象的 foo 指向同一个位置。

这里的解决方案是什么?如何获取动态分配内存的值,并将其复制到不同的地址?

【问题讨论】:

  • 问题毫无意义。请尝试重新编写它,可能会发布更多代码来说明您所询问的内容。
  • 需要更多信息: foo 的类型会很好。任何其他成员。解释你为什么不使用智能指针?
  • 这处理数组但可能有用:stackoverflow.com/questions/255612/…

标签: c++ copy pointers


【解决方案1】:

你分配新对象

class Foo
{
    Foo(const Foo& other)
    {
        // deep copy
        p = new int(*other.p); 

        // shallow copy (they both point to same object)
        p = other.p;
    }

    private:
        int* p;
};

【讨论】:

    【解决方案2】:

    我假设你的班级看起来像这样。

    class Bar {
       Foo* foo;
       ...
    }
    

    为了做一个深拷贝,你需要创建一个副本 'bar.foo' 引用的对象。在 C++ 中,您只需使用 new 运算符调用 Foo 类的复制构造函数即可:

    Bar(const Bar & bar)
    {
        this.foo = new Foo(*(bar.foo));
    }
    

    注意:此解决方案委托决定复制构造函数 new Foo(constFoo &) 是否也对 Foo 类的实现进行“深度复制”...为简单起见,我们假设它做“正确的事”!

    [注意...所写的问题非常令人困惑-它要求“从对象复制的指针的值”对我来说听起来不像是深拷贝:听起来像浅拷贝,即这个。

    Bar(const Bar & bar)
    {
        this.foo = bar.foo;
    }
    

    我认为这只是提问者的无辜混淆,深拷贝才是我们想要的。]

    【讨论】:

      【解决方案3】:

      我没有看到上下文,但是您发布的代码似乎不像复制指针,这正是您所要求的 - 复制它指向的任何内容。前提是 foo 指向分配的对象。

      【讨论】:

        猜你喜欢
        • 2015-07-21
        • 2012-04-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-13
        • 2011-09-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多