2012-06-24 64 views
1

如何創建指向對象的動態指針數組的深層副本?我相信這個代碼,我只是爲指向對象的指針分配新的內存,但他們仍然指向相同的位置。因此,當我更改「複製」圖像時,原始圖像也會更改,反之亦然。如何創建指向對象的指針的複製構造函數(深度複製)?

謝謝!

declatration:

Class Scene 
{ 
public: 
    . 
    . 
    . 
    . 
private: 
    Image ** sceneImage; 
    int * coordinateX; 
    int * coordinateY; 
    int inputMax; 
}; 
在拷貝構造函數

...

Scene::Scene (const Scene & source) 
{ 
    inputMax = source.inputMax; 
    sceneImage = new Image*[inputMax]; 
    coordinateX = new int[inputMax]; 
    coordinateY = new int[inputMax]; 

    // copy even null indexes, because you can put images on null indexes 
    for (int i = 0; i < inputMax; i++) 
    { 
     sceneImage[i] = source.SceneImage[i]; 
     coordinateX[i] = source.coordinateX[i]; 
     coordinateY[i] = source.coordinateY[i]; 
    } 
} 

回答

2

我建議你還是用向量這一點。對於動態數組,它們比指針更優雅,並且會被自動複製。

僅當它使語義有意義時才使用裸指針(數組≠指針)。這在C++中很少見。

4

立即刪除new[]的所有用途。使用std::vector。然後它會爲你複製自己。此外,放棄擁有指針和使用智能指針的所有用途。

1

向量是一個好主意。但是,如果您無法重構所有代碼以使用它們:

for (int i = 0; i < inputMax; i++) 
{ 
    sceneImage[i] = new Image(*(source.SceneImage[i])); 
    coordinateX[i] = source.coordinateX[i]; 
    coordinateY[i] = source.coordinateY[i]; 
} 

您將需要稍後刪除這些圖像。

相關問題