什么是深拷贝和浅拷贝?请给出示例。

深拷贝和浅拷贝是C++中处理对象复制时的两种不同方式,主要涉及到对象中指针成员的复制问题。

  1. 浅拷贝(Shallow Copy):
  • 浅拷贝仅复制对象的成员值,如果成员包含指针,则仅复制指针的值(即内存地址),而不复制指针所指向的实际数据。
  • 这意味着原始对象和拷贝对象的指针成员将指向相同的内存地址。
  • 浅拷贝通常是默认的复制行为。

    示例:
    假设有一个类SimpleClass,其中有一个指向int类型的指针成员。使用默认的复制构造函数(浅拷贝)来复制SimpleClass的实例时,新对象的指针成员将指向与原始对象相同的内存地址。

    class SimpleClass {
    public:
       int* ptr;
       SimpleClass(int val) {
           ptr = new int(val);
       }
    };
    
    SimpleClass obj1(10);
    SimpleClass obj2 = obj1; // 浅拷贝
    

    在这种情况下,obj1obj2ptr指向同一个内存地址。

  1. 深拷贝(Deep Copy):
  • 深拷贝不仅复制对象的成员值,如果成员包含指针,则还会复制指针所指向的数据到新的内存地址。
  • 这样,原始对象和拷贝对象的指针成员将指向不同的内存地址,它们互不影响。

    示例:
    修改上面的SimpleClass,以实现深拷贝。

    class SimpleClass {
    public:
       int* ptr;
       SimpleClass(int val) {
           ptr = new int(val);
       }
       // 深拷贝构造函数
       SimpleClass(const SimpleClass &obj) {
           ptr = new int(*obj.ptr);
       }
    };
    
    SimpleClass obj1(10);
    SimpleClass obj2 = obj1; // 深拷贝
    

    在这种情况下,obj1obj2ptr指向不同的内存地址。

深拷贝通常在对象含有动态分配的内存或资源时使用,以确保每个对象都有其自己的独立副本,避免资源共享导致的问题,如多次释放同一资源。

发表评论

后才能评论