C++(深拷贝、潜拷贝)

发布时间 2023-12-19 14:57:44作者: 做梦当财神

在C++中,深拷贝(deep copy)和浅拷贝(shallow copy)是涉及对象复制的两个概念,特别是当涉及到类或结构体时。下面我将解释这两个概念:

1. 浅拷贝(Shallow Copy):

浅拷贝是指将一个对象的内容复制到另一个对象,但如果对象中包含指针,则只会复制指针的值,而不是指针所指向的数据。这意味着两个对象会共享相同的数据,当其中一个对象的数据发生改变时,另一个对象的数据也会相应改变。

#include <iostream>

class ShallowCopyExample {
public:
    int* data;

    // Constructor
    ShallowCopyExample(int value) {
        data = new int(value);
    }

    // Shallow copy constructor
    ShallowCopyExample(const ShallowCopyExample& other) {
        data = other.data; // 只复制指针的值
    }

    // Destructor
    ~ShallowCopyExample() {
        delete data;
    }
};

int main() {
    ShallowCopyExample obj1(42);
    ShallowCopyExample obj2 = obj1; // 浅拷贝

    std::cout << *obj1.data << std::endl; // 输出: 42
    std::cout << *obj2.data << std::endl; // 输出: 42

    // 修改其中一个对象的数据
    *obj1.data = 99;

    // 由于浅拷贝,另一个对象的数据也会被修改
    std::cout << *obj1.data << std::endl; // 输出: 99
    std::cout << *obj2.data << std::endl; // 输出: 99

    return 0;
}

2. 深拷贝(Deep Copy):

深拷贝是指将一个对象的内容复制到另一个对象,并且复制指针所指向的实际数据,而不仅仅是复制指针的值。这样,两个对象有各自独立的数据,修改其中一个对象的数据不会影响另一个对象。

#include <iostream>

class DeepCopyExample {
public:
    int* data;

    // Constructor
    DeepCopyExample(int value) {
        data = new int(value);
    }

    // Deep copy constructor
    DeepCopyExample(const DeepCopyExample& other) {
        data = new int(*other.data); // 深拷贝:复制指针所指向的数据
    }

    // Destructor
    ~DeepCopyExample() {
        delete data;
    }
};

int main() {
    DeepCopyExample obj1(42);
    DeepCopyExample obj2 = obj1; // 深拷贝

    std::cout << *obj1.data << std::endl; // 输出: 42
    std::cout << *obj2.data << std::endl; // 输出: 42

    // 修改其中一个对象的数据
    *obj1.data = 99;

    // 由于深拷贝,另一个对象的数据不受影响
    std::cout << *obj1.data << std::endl; // 输出: 99
    std::cout << *obj2.data << std::endl; // 输出: 42

    return 0;
}

在实际编程中,确保使用适当的拷贝方式以防止意外的数据共享和修改。