Skip to main content

moregeek program

c++浅拷贝深拷贝_爱写代码的小白程序员的博客-多极客编程

1. C++ 浅拷贝

什么是浅拷贝?

一般比较形象的理解,浅拷贝可以理解"值"层面的拷贝,深拷贝可以理解成"内存"上的拷贝,特别是类里面含有指针类型的。

// .h文件
class HasPtrMem
{
public:
HasPtrMem();
HasPtrMem(const HasPtrMem& h);
~HasPtrMem();

void print();
int *p;
};
// .cpp 文件
HasPtrMem::HasPtrMem() : p(new int(0))
{
cout << "HasPtrMem()" << endl;
}

void HasPtrMem::print()
{
cout << *p << endl;
}

HasPtrMem::HasPtrMem(const HasPtrMem& h)
{
*p = *h.p;
}
HasPtrMem::~HasPtrMem()
{
delete p;
}
// main.cpp
HasPtrMem a;
HasPtrMem b(a)
a.print(); // 输出0
b.print(); // 输出0

上面这段代码的执行

HasPtrMem a;    // 调用HasPtrMem::HasPtrMem() : p(new int(0))
HasPtrMem b(a) // 实际上是HasPtrMem b = a,调用HasPtrMem::HasPtrMem(const HasPtrMem& h)

此时main函数执行结束后都会调用析构函数对p的内存进行释放,但是,对象b实际上是指向对象b的内存(相当于直接赋值)

C++浅拷贝深拷贝_浅拷贝

如果此时析构函数先对a对象进行析构,此时释放a对象里面指针p的内存,接着再对b对象析构,释放b对象的指针内存,程序crash(由于P的内存实际上在a对象已经被嘎掉了)

所以,类对象里面包含指针数据的,一定要实现深拷贝

2. C++ 深拷贝

深拷贝就是对实际内存进行分配,在对内存的值进行赋值填充(表达不好,有哪个意思懂就可以哈)

C++浅拷贝深拷贝_c++_02

深拷贝代码

// .h文件
class HasPtrMem
{
public:
HasPtrMem();
HasPtrMem(const HasPtrMem& h);
~HasPtrMem();

void print();
int *p;
};
// .cpp文件
HasPtrMem::HasPtrMem() : p(new int(0))
{
cout << "HasPtrMem()" << endl;
}

void HasPtrMem::print()
{
cout << *p << endl;
}

HasPtrMem::HasPtrMem(const HasPtrMem& h)
{
p = new int(*h.p);
}
HasPtrMem::~HasPtrMem()
{
delete p;
}

这就是深拷贝浅拷贝,不注意就会带来坑爹的代码,造成程序嘎嘎crash!!!!!


©著作权归作者所有:来自51CTO博客作者爱写代码的小白程序员的原创作品,请联系作者获取转载授权,否则将追究法律责任

在华为云 cce 上部署 emqx mqtt 服务器集群_emq的博客-多极客编程

云进入以「应用为中心」的云原生阶段,Operator 模式的出现,则为 Kubernetes 中的自动化任务创建配置与管理提供了一套行之有效的标准规范。通过将运维知识固化成高级语言 Go/Java 代码,使得运维知识可以像普通软件一样交付,并能支持高可靠、具备高级运维能力的有状态应用批量交付。针对大规模分布式物联网 MQTT 消息服务器 EMQX 全生命期管理的自动化管理工具 EMQX Kuber

全志d1h芯片 tina 如何查看通过 procd init 脚本启动的应用输出到 stdout/stderr 的打印信息?_神棍地海棠的博客-多极客编程

问题描述 当我们使用 procd init 脚本让某个应用程序实现开机自启时,会发现应用程序中原本通过 printf/fprintf 等输出到 stdout/stderr 的打印信息都无法从串口或 adb shell 中看到了。 这些打印默认是输出到什么地方?我们可以如何看到这些打印? 原因 一般情况下,当用户在终端中执行命令来运行某个应用程序时,stdin/stdout/stderr 就确定下来

linux虚拟文件系统(vfs)_爱写代码的小白程序员的博客-多极客编程

1.虚拟文件系统(VFS) 1.1 VFS的情景 虚拟文件系统主要是对文件进行抽象的模型,可以把文件模型当面向对象的方式区看待 通用的文件模型对象组成 超级块(superblock) 索引节点(inode) 目录项(dentry) 文件(file) 超级块:主要是用来描述文件系统信息,一般一个次哦按都会分成很多个块,可以理解成一个磁盘上是很多superblock组成. 索引节点inode:描述

ohos-mpchart——支持多种图表绘制的组件_openharmony开发者的博客-多极客编程

Ohos-MPChart——支持多种图表绘制的组件​简介​Ohos-MPChart是OpenAtom OpenHarmony(简称“OpenHarmony”)系统显示各种图表视图的三方组件,用于声明式应用开发,提供了多种多样的图表视图,包括折线图、曲线图、柱形图、饼状图、K线图、雷达图、气泡图。适用于各种统计后的数据以视觉直观的方式呈现。使用场景​Ohos-MPChart为广大OpenHarmon

成长计划校园极客秀|基于openharmony的智能阳台_openharmony开发者的博客-多极客编程

成长计划校园极客秀|基于OpenHarmony的智能阳台​前言​本文由OpenAtom OpenHarmony(以下简称“OpenHarmony”)开源开发者成长计划活动的参与者李建涛提供,详细阐述了由搭载OpenHarmony系统的拓维Niobe开发套件开发而来的智能阳台项目的全过程,包括项目流程、硬件准备、软件分析,以及问题分析等,能够为开发者后续开发类似项目时提供一些参考。一、项目设计与分析

全志v853+xr829 tina无线网络wifimanger2.0使用指南_神棍地海棠的博客-多极客编程

1.主题 Tina无线网络wifimanger2.0使用指南 2.问题背景 产品:所有需要用到无线的产品 硬件:V853 + XR829 软件:Tina4.0 + Wi-Fi 配置文件下载:https://bbs.aw-ol.com/topic/1867/ 3.问题分析 考虑到之前的wifimanger1.0版本存在如下缺点: 1.不支持多线程。 2.不支持跨平台,不能和rtos的版本兼容。

全志d1h芯片 tina 如何查看通过 procd init 脚本启动的应用输出到 stdout/stderr 的打印信息?_神棍地海棠的博客-多极客编程

问题描述 当我们使用 procd init 脚本让某个应用程序实现开机自启时,会发现应用程序中原本通过 printf/fprintf 等输出到 stdout/stderr 的打印信息都无法从串口或 adb shell 中看到了。 这些打印默认是输出到什么地方?我们可以如何看到这些打印? 原因 一般情况下,当用户在终端中执行命令来运行某个应用程序时,stdin/stdout/stderr 就确定下来

linux虚拟文件系统(vfs)_爱写代码的小白程序员的博客-多极客编程

1.虚拟文件系统(VFS) 1.1 VFS的情景 虚拟文件系统主要是对文件进行抽象的模型,可以把文件模型当面向对象的方式区看待 通用的文件模型对象组成 超级块(superblock) 索引节点(inode) 目录项(dentry) 文件(file) 超级块:主要是用来描述文件系统信息,一般一个次哦按都会分成很多个块,可以理解成一个磁盘上是很多superblock组成. 索引节点inode:描述

4步成功将三方库——speexdsp移植到openharmony_openharmony开发者的博客-多极客编程

4步成功将三方库——speexdsp移植到OpenHarmony​战码先锋,PR征集令(以下简称“战码先锋”)第二期正如火如荼地进行中,涉及OpenAtom OpenHarmony(以下简称“OpenHarmony”)主干仓、SIG仓、三方库,共计1000+代码仓任君挑战。在战码先锋活动中,我们注意到开发者对三方库移植有着浓厚的兴趣。三方库是基于标准Linux系统的C/C++开源库,例如OpenC

ohos-mpchart——支持多种图表绘制的组件_openharmony开发者的博客-多极客编程

Ohos-MPChart——支持多种图表绘制的组件​简介​Ohos-MPChart是OpenAtom OpenHarmony(简称“OpenHarmony”)系统显示各种图表视图的三方组件,用于声明式应用开发,提供了多种多样的图表视图,包括折线图、曲线图、柱形图、饼状图、K线图、雷达图、气泡图。适用于各种统计后的数据以视觉直观的方式呈现。使用场景​Ohos-MPChart为广大OpenHarmon

成长计划校园极客秀|基于openharmony的智能阳台_openharmony开发者的博客-多极客编程

成长计划校园极客秀|基于OpenHarmony的智能阳台​前言​本文由OpenAtom OpenHarmony(以下简称“OpenHarmony”)开源开发者成长计划活动的参与者李建涛提供,详细阐述了由搭载OpenHarmony系统的拓维Niobe开发套件开发而来的智能阳台项目的全过程,包括项目流程、硬件准备、软件分析,以及问题分析等,能够为开发者后续开发类似项目时提供一些参考。一、项目设计与分析

全志v853+xr829 tina无线网络wifimanger2.0使用指南_神棍地海棠的博客-多极客编程

1.主题 Tina无线网络wifimanger2.0使用指南 2.问题背景 产品:所有需要用到无线的产品 硬件:V853 + XR829 软件:Tina4.0 + Wi-Fi 配置文件下载:https://bbs.aw-ol.com/topic/1867/ 3.问题分析 考虑到之前的wifimanger1.0版本存在如下缺点: 1.不支持多线程。 2.不支持跨平台,不能和rtos的版本兼容。