如何创建指向对象的动态指针数组的深层副本?我相信这段代码,我只是为指向对象的指针分配新内存,但它们仍指向同一位置。因此,当我更改“复制”图像时,原始图像也会更改,反之亦然。
谢谢!
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];
}
}
答案 0 :(得分:4)
立即删除new[]
的所有用途。使用std::vector
。然后它将为您复制自己。此外,删除拥有指针的所有用法并使用智能指针。
答案 1 :(得分:2)
我建议您使用矢量。对于动态数组而言,它们比指针更优雅,并且会自动复制。
只有在具有语义意义(数组≠指针)时才使用裸指针。这在C ++中很少会出现这种情况。
答案 2 :(得分: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];
}
稍后您需要删除这些图片。