2009-12-20 68 views
8

在为持有指向动态分配内存的类编写一个拷贝构造函数时,我有一个问题。写一个深层拷贝 - 复制指针值

如何指定我希望将复制的对象的指针的值复制到复制到的对象的指针。显然,这样的事情没有工作...

*foo = *bar.foo; 

,因为酒吧对象被删除(复制摆在首位对象的目的),这只是已复制到对象的FOO点同一个地方。

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

+0

问题是没有意义的。请尝试重新编写它,可能会发布更多代码来说明您所问的内容。 – 2009-12-20 20:41:58

+0

需要更多信息:foo的类型会很好。任何其他成员。解释你为什么不使用智能指针? – 2009-12-20 20:56:32

+0

这处理数组,但可能是有用的:http://stackoverflow.com/questions/255612/c-dynamically-allocating-an-array-of-objects/255744#255744 – 2009-12-20 21:07:21

回答

18

您分配新对象

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; 
}; 
1

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

2

我假设你的类看起来是这样的。

class Bar { 
    Foo* foo; 
    ... 
} 

为了做一个深拷贝,你需要创建通过“bar.foo”引用的对象的副本

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

注:在C++中,你只需使用new运算符调用类Foo的拷贝构造函数做这个解决方案代表的拷贝构造新的Foo(constFoo &)是否也做了“深的决定复制'到Foo类的实现...为了简单起见,我们假设它做'正确的事情'!

[注意...写入的问题非常混乱 - 它要求复制的对象的指针的值'听起来不像深层复制给我:听起来像一个浅拷贝,即这。

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

我认为这是对提问者的部分​​只是无辜的混乱,深拷贝是什么是想要的。]