深拷贝和浅拷贝

发布时间 2023-12-04 13:24:53作者: ponder776

在 C++ 中,深拷贝和浅拷贝是两种不同的对象复制方式:

  • 浅拷贝:当我们创建一个对象的副本时,如果仅仅复制所有成员变量的数据,那么这就是浅拷贝。这在所有的变量都在栈内存中分配时工作得很好1。但是,如果有些变量是在堆内存中动态分配的,那么复制的对象变量也会引用同一块内存位置1。这将导致二义性和运行时错误,如悬挂指针1。因为两个对象都引用同一块内存位置,所以一个对象中的更改也会反映在另一个对象中1。由于我们希望创建对象的副本,因此浅拷贝不能满足这个目的1

  • 深拷贝:在深拷贝中,通过复制所有变量的数据,并为对象分配相同的内存资源并赋予相同的值,从而创建一个对象。为了执行深拷贝,我们需要显式地定义拷贝构造函数,并根据需要分配动态内存1。此外,还需要在其他构造函数中为变量动态分配内存1

总的来说,深拷贝和浅拷贝的主要区别在于它们如何处理对象的动态内存。浅拷贝只复制指向动态内存的指针,而不复制动态内存本身。深拷贝不仅复制指向动态内存的指针,还复制动态内存本身。