1

如何创建指向对象的动态指针数组的深层副本?我相信这段代码,我只是为指向对象的指针分配新内存,但它们仍然指向同一个位置。因此,当我更改“复制”图像时,原始图像也会更改,反之亦然。

谢谢!

声明:

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];
    }
}
4

3 回答 3

4

立即放弃所有用途new[]。使用std::vector. 然后它会为你复制自己。此外,放弃所有使用拥有指针并使用智能指针。

于 2012-06-24T20:15:32.500 回答
2

I suggest you rather use vectors for this. They are more elegant for dynamic arrays than pointers and will be automatically copied.

Use naked pointers only when it makes semantic sense (array≠pointer). This will only rarely be the case in C++.

于 2012-06-24T20:15:21.047 回答
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];
}

稍后您将需要删除这些图像。

于 2012-06-24T20:21:16.757 回答