21xrx.com
2024-12-22 17:38:56 Sunday
登录
文章检索 我的文章 写文章
C++深拷贝和浅拷贝的区别及实现方式解析
2023-07-12 21:46:54 深夜i     --     --
C++ 深拷贝 浅拷贝 区别 实现方式

在C++编程中,深拷贝和浅拷贝是两个重要的概念,它们分别指的是复制对象的方法。深拷贝和浅拷贝的区别在于复制一个对象时是否复制其指针所指的内容。

深拷贝指的是在复制对象的时候,将原对象中存储在堆中的数据块复制一份到新的对象中,并且两个对象互不影响。例如,在复制一个数组时,深拷贝会将数组中的每一个元素都复制一份,而不是简单地复制指向数组的指针。

与之相反的是浅拷贝,浅拷贝只是简单地将原对象中的指针值复制到新的对象中,这意味着两个对象中的指针指向同一个指针指向的内存空间,因此在修改其中一个对象中的指针所指向的内容时,另一个对象的指针也会指向同样的内容。

现在看一下如何实现深拷贝和浅拷贝。对于浅拷贝,只需要将一个对象的指针值赋给另一个对象即可,如下所示:


class ShallowCopy {

public:

  int* data;

  ShallowCopy() {

    data = new int[10];

  }

  ShallowCopy(const ShallowCopy& obj)

    data = obj.data;

  

};

上述代码中,浅拷贝的实现使用了对象的拷贝构造函数,拷贝构造函数中只是简单地将原对象的指针赋值给新的对象。

对于深拷贝,需要在拷贝构造函数中重新分配一块内存来存储数据,然后将原对象中的数据复制到新的内存空间中,如下所示:


class DeepCopy {

public:

  int* data;

  DeepCopy() {

    data = new int[10];

  }

  DeepCopy(const DeepCopy& obj) {

    data = new int[10];

    std::copy(obj.data, obj.data + 10, data);

  }

};

上述代码中,在拷贝构造函数中重新分配了一块内存来存储数据,然后使用std::copy函数将原对象的数据复制到新的内存空间中。

在实际的编程过程中,需要根据具体的需求来选择深拷贝还是浅拷贝。如果你希望两个对象互不影响,那么就要选择深拷贝;如果你希望两个对象共享同一块内存空间,那么就要选择浅拷贝。在使用指针或动态内存分配时,特别需要注意深浅拷贝的问题,避免因为拷贝而引发程序错误。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复