c++深拷贝与浅拷贝

更多 LSTM 变种——应用于 CMAPSS 数据集 本文并模型介绍,只是把一些比较火的技术,像双向注意力机制,自注意力机制这样的比较火的内容,简单的和LSTM堆叠,结果发现效果都不如最基础的,这里作者将本人代码及实现结果,进行展示,给各位想更改LSTM的朋友一些。 阅读详情

直接看代码更直观,注释都在代码里

#include <iostream>

using namespace std;

//浅拷贝demo
class A{
public:
	~A()
	{
		cout << "A析构函数" << endl;
	}
	A() :m_num(0){}
	void setNum(int num){
		m_num = num;
	}
	int getNum()
	{
		return m_num;
	}
private:
	int m_num;
};

//深拷贝demo1 内存泄漏版
class B{
public:
	B(const char *str = ""){
		cout << "B构造函数" << endl;
		m_data = new char[strlen(str) + 1];
		memset(m_data, 0, strlen(str) + 1);
		memcpy(m_data, str, strlen(str));
	}
	~B(){
		if (m_data)
		{
			cout << "B析构函数" << endl;
			delete m_data;
			m_data = nullptr;
		}
	}

	char *m_data;
};

//深拷贝demo2 正常版
class C{
public:
	C(const char *str=""){
		cout << "C构造函数" << endl;
		m_data = new char[strlen(str) + 1];
		cout << "sizeof(m_data)=" << sizeof(m_data)
			<<" sizeof(*m_data)="<<sizeof(*m_data)
			<<" strlen(str)+1="<<strlen(str)+1<< endl;

		memset(m_data, 0, strlen(str) + 1);
		memcpy(m_data, str, strlen(str));
	}
	~C(){
		if (m_data)
		{
			cout << "C析构函数" << endl;
			delete m_data;
			m_data = nullptr;
		}
	}
	C(const C &c)
	{
		cout << "拷贝构造" << endl;
		int len = strlen(c.m_data) + 1;
		m_data = new char[len];
		memset(m_data, 0, len);
		memcpy(m_data, c.m_data, strlen(c.m_data));
	}
	char *getData()
	{
		return m_data;
	}

	char *m_data;
};

//客户端
int main()
{
	//浅拷贝 没有指针的时候,不需要担心内存泄漏
	A a;
	a.setNum(10);
	A a1 = a;	
	cout << "num=" << a.getNum() << endl;	//输出10
	cout << "num=" << a1.getNum() << endl;	//输出10

	//深拷贝 崩溃版,指针指向同一块内存,析构时释放指针会被释放两次
	//B b;
	//B b1 = b;

	//深拷贝 正常版
	C c("123456");
	cout << "c=" << c.getData() << endl;
	C c1 = c;
	cout << "c1="<<c1.getData()<< endl;

	return 0;
}

效果

蒙特卡洛+概率潮流!基于蒙特卡洛和新能源出力模拟的概率潮流分布程序代码! 最后,导出光照强度、风速、网损和节点电压的概率分布图,并计算了各节点电压和网损的平均值和方差,展示了接入前后的节点电压对比图。在不确定性增加的电力系统中,概率潮流成为含随机因素规划问题的求解前提,可以更加真实地反映电力系统的全面信息。此外,概率潮流还可用于研究风电和光伏发电出力以及电动汽车消耗功率和向电力系统反向供电功率的不确定性对电力系统的影响,发现系统运行中的潜在风险,为系统运行控制提供参考。概率潮流的目的是揭示电网中随机变量对系统的影响,发现电网中的薄弱环节,为规划和调度部门的决策提供有价值的信息。 阅读详情

相关推荐

surfer10与Arcgis10.3 完美生成等值线和等值面方法

surfer10 与Arcgis10.3生成等值线和等值面的步骤如下: 1.准备surfer用的Book1.dat文件,格式如下: "x" "y" "z" 116.471992 40.809975 232 116.335556 40.700542 1235 116.541626 40.713333 214 116.73349 40.798607 566 2.在surfer中,选择Gr

哈里·雪利博客 1万+

C++ -- 深浅拷贝

浅拷贝 1.例如对于下面的String类,它包含一个成员变量,一个char*的指针: class String { private: char* _str; }; 2.对于String类的拷贝构造函数及operator=函数来说,当用一个String对象拷贝构造或赋值给另一个String对象时,就是将这个对象里的指针的值赋值给另一个对象里的指针。将一个指针值赋值给另一个指针,就会...

我的博客 1万+

用AI画电路板AI EDA初探Creating WiFi Radio with CELUS: A Step-by-Step Tutorial 使用CELU.IO创建WiFi收音机:分步教程

结论:整体还不太成熟,所选器件单元是欧美思维,器件选型成本和咱们华强北还是无法比。可以关注迭代,看客就当走马观花就行了;不过里面的单元模块还带有AI提问的这个比较好,值得国内EDA从业者学习。话不多说上正文:本教程目的是让我们深入了解如何使用CELUS设计平台构建WiFi收音机实战项目。本指南的重点是使用该平台来选择正确的解决方案,并整合一个项目,让您可以将音乐和节目从互联网直接传输到您自己构建的扬声器。

2301_81235726的博客 1万+

c++拷贝函数——深浅拷贝

拷贝构造函数 拷贝构造函数也是构造函数,长相和构造函数一样的,只是参数是固定 拷贝构造函数唯一的参数是对对象引用 不写拷贝构造函数,也存在一个默认的拷贝构造函数 拷贝构造函数作用: 通过一个对象去初始化另一个对象 思考问题 什么时候调用拷贝构造? 当通过一个对象去创建出来另一个新的对象时候需要调用拷贝 拷贝构造什么时候需要加const修饰参数? 当存在匿名对象赋值操作的时候,必须要const修饰

weixin_68269316的博客 5366

NHANES数据库实战:数据合并与加权分析技巧

本文详细解析了NHANES数据库实战中的核心技巧,重点阐述了数据合并与加权分析的正确方法。通过两个具体案例,手把手指导如何从数据下载、合并、权重计算到使用R语言survey包进行加权统计分析,避免因忽略复杂抽样设计而导致的研究偏倚,确保分析结果的准确性与可发表性。

weixin_29057065的博客 585

嵌入式系统开发笔记112:通过有人云测试MQTT

项目中使用到“有人”公司的WH-LTE-7S0模块,本文讲解通过有人云进行MQTT测试的方法。

snmplink的博客 997

22 C++ - 深拷贝和浅拷贝

1.浅拷贝 同一类型的对象之间可以赋值,使得两个对象的成员变量的值相同,两个对象仍然是独立的两个对象,这种情况被称为浅拷贝。 一般情况下,浅拷贝没有任何副作用,但是当类中有指针,并且指针指向动态分配的内存空间,析构函数做了动态内存释放的处理,会导致内存问题。 2. 深拷贝 当类中有指针,并且此指针有动态分配空间,析构函数做了释放处理,往往需要自定义拷贝构造函数,自行给指针动态分配空间,深拷贝。 ...

阿甘兄 1721

OpenClaw实战系列06:持久记忆与RAG知识库构建——让AI真正“记住”你

本文介绍了OpenClaw AI助理的持久记忆与RAG知识库构建功能。OpenClaw采用"文件即真理"的独特设计,所有记忆都以Markdown文件形式存储,支持直接编辑和Git版本管理。记忆系统分为三层:长期精炼记忆(MEMORY.md)、日常日志(按日期存储)和归档记忆。文章详细说明了环境配置步骤,包括安装必要组件、创建目录结构、设置API密钥,并提供了OpenClaw主配置文件的完整参数说明。该系统实现了跨会话、跨平台的持久化记忆,使AI助理能真正理解用户需求。

PeterPan的博客 1171

【C++】深拷贝&浅拷贝

在 C++ 中,当一个对象通过赋值或拷贝即将成为另一个对象的副本时,会发生“浅拷贝”或“深拷贝”。当对象中只包含了基本数据类型成员时,可以使用浅拷贝;当对象中包含了指针类型成员时,需要使用深拷贝。

crr411422的博客 2761

数据挖掘实战-基于LSTM时间序列模型的香烟销售预测分析

本文介绍了基于LSTM时间序列模型的香烟销售预测分析实验。实验背景为烟草市场竞争激烈,企业需提高销售预测准确性以优化生产、库存和营销策略。LSTM模型因其处理长序列数据的能力被选为预测工具。实验步骤包括数据准备、特征工程、模型构建、训练与评估及结果分析。数据集来自某市门店的销售数据,技术工具为Python 3.9和Jupyter Notebook。实验过程涵盖数据导入、预处理、产品销售与区域销售分析、销售预测(包括销售额、销量、利润及海通店销售额预测)。

m0_64336780的博客 8951

全覆盖路径规划开源项目Clean-robot-turtlebot3关键函数解析(下)

本系列文章主要介绍全覆盖路径规划开源项目Clean-robot-turtlebot3的相关内容,包含如下四篇文章,分别介绍了开源项目Clean-robot-turtlebot3流程的概括总结、ROS坐标系常用坐标及其变换、Clean-robot-turtlebot3关键函数解析等内容。

慕羽★的博客 2298

C++:深拷贝和浅拷贝

对于基本类型的数据以及简单的对象,它们之间的拷贝非常简单,就是按位复制内存。

crossoverpptx的博客 2262

矩阵理论与应用:数理经济学中的投入产出模型分析

1. 背景介绍 矩阵理论是现代数学中的一个重要分支,它在各个领域都有广泛的应用。其中,投入-产出模型是矩阵理论在经济学中的一种应用,它可以用来分析一个国家或地区的经济结构和发展趋势。本文将介绍投入-产出模型的基本概念和原理,并通过实例来说明其应用。 2. 核心概念与联系 投入-产出模型是一

AI天才研究院 1486

c++深拷贝和浅拷贝

C++中类的拷贝有两种:深拷贝,浅拷贝:当出现类的等号赋值时,即会调用拷贝函数 一:两个的区别 1 在未定义显示拷贝构造函数的情况下,系统会调用默认的拷贝函数——即浅拷贝,它能够完成成员的一一复制。当数据成员中没有指针时,浅拷贝是可行的;但当数据成员中有指针时,如果采用简单的浅拷贝,则两类中的两个指针将指向同一个地址,当对象快结束时,会调用两次析构函数,而导致指针悬挂现象,所以,此时,必须采用深拷贝。 2 深拷贝与浅拷贝的区别就在于深拷贝会在堆内存中另外申请空间来储存数据,从而也就解决了指针悬挂的问

OneBaBa的专栏 1万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

C++的浅拷贝与深拷贝

C++中有两种拷贝:深拷贝和浅拷贝要是想要运用好拷贝函数就必须清楚深拷贝与浅拷贝的区别深拷贝和浅拷贝的区别是在对象状态中包含其它对象的引用的时候,深拷贝的实现需要构造拷贝函数新建一个堆区空间在进行拷贝,浅拷贝直接拷贝即可(简单的值的拷贝)。

qq_62512411的博客 9410

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C++浅拷贝与深拷贝

浅拷贝:简单的赋值拷贝操作。 深拷贝:在堆区重新申请空间,进行拷贝操作。 C++中在对一个已知对象进行拷贝的时候,会调用类中的拷贝构造函数,如果程序员未定义拷贝构造函数,则会调用编译器默认的拷贝构造函数进行值拷贝! 看一个简单的例子: #include <iostream> using namespace std; class Person { public: Person() { /*默认构造函数*/ cout << "Person默认构造桉树的...

qq_42174306的博客 1万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

[C++]C++浅拷贝与深拷贝

C++中有两种拷贝:深拷贝和浅拷贝要是想要运用好拷贝函数就必须清楚深拷贝与浅拷贝的区别深拷贝和浅拷贝的区别是在对象状态中包含其它对象的引用的时候,深拷贝的实现需要构造拷贝函数新建一个堆区空间在进行拷贝,浅拷贝直接拷贝即可(简单的值的拷贝)。

FL1768317420的博客 2160

【C++】深入浅出C++中深拷贝和浅拷贝

对于基本数据类型的成员变量,浅拷贝直接进行值传递,也就是将属性值复制了一份给新的成员变量对于引用数据类型的成员变量,比如成员变量是数组、某个类的对象等,浅拷贝就是引用的传递,也就是将成员变量的引用(内存地址)复制了一份给新的成员变量,他们指向的是同一个事例。在一个对象修改成员变量的值,会影响到另一个对象中成员变量的值。对于第一点不难看懂,浅拷贝就是对内置类型的拷贝按内存存储,字节序完成拷贝的,这点常常在C语言中体现,例如我们在给函数传实参的时候,通常是将实参拷贝一份传递给形参。

cilmy23的note 2347

c++ 浅拷贝与深拷贝

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、浅拷贝与深拷贝的时机二、深浅拷贝的详细理解1.浅拷贝2.深拷贝总结 前言 浅拷贝与深拷贝是c++中一个非常重要的点,也是面试经典问题,如果对这2个操作没有深入的理解,那么开发中的代码就会存在潜在的内存泄露危险 一、浅拷贝与深拷贝的时机 深浅拷贝的时机是:拷贝内容中有对指针的拷贝 二、深浅拷贝的详细理解 1.浅拷贝 浅拷贝是由编译器默认完成的操作,它的拷贝过程是逐bit位拷贝 假设有如下一个string类: class s

weixin_46698687的博客 1470

【C++】深入理解<深拷贝和浅拷贝>

本章的内容有: 什么是浅拷贝?什么是深拷贝?为什么要有深拷贝?如何理解浅拷贝和深拷贝?

翼同学 3057

深入浅出:C++深拷贝与浅拷贝

在 C++ 编程中,对象的复制操作看似简单,但其中隐藏的内存管理问题往往是初学者最容易踩的“地雷”。这篇文章将以循序渐进的方式,详细解读浅拷贝和深拷贝的原理、区别以及应用场景,帮助你构建正确的拷贝语义认识,为后续的类、封装等面向对象知识打下坚实基础

筏的博客 1764

简述C++ 中的浅拷贝与深拷贝

浅拷贝是指在进行对象拷贝时,只是简单地将源对象中的成员变量的值逐个复制到目标对象中。对于普通的数据类型成员(如intdouble等),这种复制方式能够完整地复制数据。但当源对象包含指针成员时,浅拷贝仅仅复制了指针的值,而不是指针所指向的数据,这就导致新创建的目标对象中的指针和源对象中的指针指向同一块内存空间。public:}//赋值构造}//浅拷贝}//析构函数int *value;//更改vaule大小return 0;

ikkkkkkkl的博客 2459

C++ 深拷贝和浅拷贝问题详解

浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存(分支)。浅拷贝是按位拷贝对象,它会创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值;如果属性是内存地址(引用类型),拷贝的就是内存地址 ,因此如果其中一个对象改变了这个地址里的值,就会影响到另一个对象。深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。...

a只如初见的博客 3994

C++ 深拷贝和浅拷贝

浅拷贝适合那些不需要独立数据的情况,而深拷贝则用于需要保持对象独立性、避免资源共享冲突的场景。深拷贝一般会增加一定的性能开销,但可以避免浅拷贝带来的潜在问题,如悬挂指针或内存泄漏等。

2301_79937517的博客 1519

C++ 浅拷贝 & 深拷贝

C++ 对象的赋值, 赋值, 介绍浅拷贝 (shallow copy) 和深拷贝 (deep copy) 的区别.

我是小白呀的博客 9577

C++中深拷贝与浅拷贝的原理

只要类中包含new/delete管理的动态内存,就必须手动实现深拷贝(拷贝构造函数 + 赋值运算符重载),否则会触发浅拷贝的内存安全问题。浅拷贝是编译器默认的逐字节复制,仅复制指针地址,适用于无动态内存的简单类,但会导致多个对象共享堆内存,引发内存错误;深拷贝需要手动实现,为指针成员重新分配独立内存并复制内容,保证对象独立性,是处理动态内存类的必选方案;·对指针成员变量:仅复制指针的地址(而非指针指向的堆内存内容);不仅复制对象的成员变量,还会为指针成员重新分配独立的堆内存;2、代码示例(浅拷贝的问题)

流浪青春 949
上一篇: c++之职责链模式
下一篇: c++之迭代器模式
Qt上位机开发
Qt上位机开发 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄9年 9664粉丝 178原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值