c++ - 如何创建对象指针的复制构造函数(深复制)?

标签 c++

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

谢谢!

声明:

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

最佳答案

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

关于c++ - 如何创建对象指针的复制构造函数(深复制)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11180874/

相关文章:

c++ - 在C代码中添加到头文件时,全局数组没有 'type'

c++ - RASDIAL API 无法在 64 位系统上连接 [在 32 位系统/VPN 上运行良好]

C++ void_t SFINAE false_type true_type 无法获得特化

c++ - 编译好的文件放到文件夹后无法运行程序

android - NDK 链接库与 cmake

c++ - 制作标签数组的有效方法

c++ - 如何通过 C++ 通过 JNI 传递扩展 ASCII 字符

c++ - 如何更改for循环之前声明的变量值并尝试在C++中更改for循环中的值?

c++ - 替换或替换大量具有特定范围的 if..else 语句

c++ - 全屏小部件