深拷贝和浅拷贝

简介: 类里面会为我们实现默认的拷贝,这个做的是值的拷贝,但是假如对象里的数据成员在堆上开辟了内存资源,如果继续浅拷贝就会导致两根指针指向同一块资源,从而产生内存泄漏问题。但是深拷贝可以解决这个问题,本文将详细介绍深拷贝与浅拷贝。

1.拷贝的分类:深拷贝和浅拷贝



2.深拷贝和浅拷贝的介绍

(1)深拷贝:自己实现的拷贝构造函数,对于栈上的对象直接进行赋值,对于堆上的对象,另外开辟一块内存并将其资源复制到我新开辟的一块内存上。不会产生资源泄漏问题。

(2)浅拷贝:类默认实现的拷贝构造,只是将所有成员的值拷贝到我身上。容易产生资源泄漏问题。

下面我们通过一段简短的代码理解深拷贝与浅拷贝。

#include <iostream>usingnamespacestd;
classA{
public:
A(constA&a)
    {
this->a_=a.a_; // 普通成员直接赋值b_=newint;
*b_=*a.b_; // 堆上的成员需要额外分配内存    }
private:
inta_=10;
int*b_=newint{ 20 };
};
intmain(void)
{
return0;
}
相关文章
|
7月前
|
设计模式 存储 Java
深拷贝与浅拷贝,就是这么简单
深拷贝与浅拷贝,就是这么简单
|
存储 Cloud Native Linux
C++ 深拷贝浅拷贝
C++ 深拷贝浅拷贝
|
JSON Java API
深拷贝、浅拷贝
深拷贝、浅拷贝
86 0
|
JavaScript 前端开发 Python
故事会【深拷贝和浅拷贝】
故事会【深拷贝和浅拷贝】
|
2月前
|
JavaScript 前端开发 Java
什么是深拷贝,什么是浅拷贝
什么是深拷贝,什么是浅拷贝
63 0
|
7月前
|
JavaScript 前端开发
浅拷贝和深拷贝
浅拷贝和深拷贝
52 2
|
编译器 C++
C++中的深拷贝和浅拷贝介绍
对于基本类型的数据以及简单的对象,它们之间的拷贝非常简单,就是按位复制内存。例如: class Base{ public: Base(): m_a(0), m_b(0){ } Base(int a, int b): m_a(a), m_b(b){ } private: int m_a; int m_b; }; int main(){ int a = 10; int b = a; //拷贝 Base obj1(10, 20);
129 0
|
Java
浅拷贝与深拷贝
浅拷贝与深拷贝
91 0
|
前端开发
对于深拷贝与浅拷贝的理解
对于深拷贝与浅拷贝的理解