2009-12-20 56 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; 
} 

我認爲這是對提問者的部分​​只是無辜的混亂,深拷貝是什麼是想要的。]