深拷贝和浅拷贝

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

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;
}
相关文章
|
1天前
局部变量和成员变量
局部变量和成员变量 1.定义的位置不一样【重点】 局部变量:在方法的内部 成员变量:在方法的外部,直接写在类当中 2.作用范围不一样【重点】 局部变量:只有方法当中才可以使用,出了方法就不能再用 成员变量:整个类全都可以通用。 3.默认值不一样【重点】 局部变量:没有默认值,如果要想使用,必须手动进行赋值 成员变量:如果没有赋值,会有默认值,规则和数组一样局部变量和成员变量 1.定义的位置不一样【重点】 局部变量:在方法的内部 成员变量:在方法的外部,直接写在类当中 2.作用范围不一样【重点】 局部变量:只有方法当中才可以使用,出了方法就不能再用 成员变量:整个类全都可以通用。 3.默认值不一
14 7
|
12月前
|
Java
Java深拷贝和浅拷贝Map对象
Java深拷贝和浅拷贝Map对象
159 0
|
缓存 边缘计算 前端开发
系统介绍浏览器缓存机制及前端优化方案
系统介绍浏览器缓存机制及前端优化方案
系统介绍浏览器缓存机制及前端优化方案
|
12月前
|
机器学习/深度学习 前端开发 测试技术
智能语音技术的相关技术(二)
智能语音技术的相关技术(二)
265 0
|
存储 JSON 算法
JWT令牌生成与校验
JWT令牌生成与校验
377 0
|
缓存 算法 安全
【Java对象拷贝机制】使用CGlib实现Bean拷贝(BeanCopier)
【Java对象拷贝机制】使用CGlib实现Bean拷贝(BeanCopier)
473 0
【Java对象拷贝机制】使用CGlib实现Bean拷贝(BeanCopier)
Mybatis-Plus时间范围查询
Mybatis-Plus时间范围查询
|
语音技术
计算语音合成接口返回音频的时长
阿里云语音合成接口可以将文本转为语音并返回到本地项目下,我们可以通过直接获取本地生成的音频计算下音频时长
453 0
计算语音合成接口返回音频的时长
|
JSON Java Apache
|
自然语言处理 Java 人机交互
阿里云长文本语音合成接口的JavaSDK调用
智能语音交互(Intelligent Speech Interaction),是基于语音识别、语音合成、自然语言理解等技术,为企业在多种实际应用场景下,赋予产品“能听、会说、懂你”式的智能人机交互体验。适用于多个应用场景中,包括智能问答、智能质检、法庭庭审实时记录、实时演讲字幕、访谈录音转写等场景,在金融、保险、司法、电商等多个领域均有应用案例。本文介绍如何使用阿里云智能语音服务提供的长文本语音合成Java SDK,包括SDK的安装方法及SDK代码示例。
743 0
阿里云长文本语音合成接口的JavaSDK调用