C++中的位拷贝和值拷贝

【数据分析/商业分析】面试题整理——SQL专题 数据分析\商业分析—面试题整理 自己总结的SQL类的面试题 文章目录数据分析\商业分析—面试题整理1.新增用户2.活跃用户数量3.连续登录4.次(n)日留存5.每个科目下分数最高的两名学生 阅读详情

C++中的位拷贝和值拷贝

  原文:http://blog.csdn.net/liam1122/article/details/1966617

  为了便于说明我们以String类为例:

  首先定义String类,而并不实现其成员函数。 

复制代码
Class String

{
    public:
       String(const char *ch=NULL);//默认构造函数
       String(const String &str);//拷贝构造函数
       ~String(void);
       String &operator=(const String &str);//赋值函数
    private:
       char *m_data;
}; 
复制代码

位拷贝拷贝的是地址,而值拷贝则拷贝的是内容。如果定义两个String对象A和B。A.m_data和B.m_data分别指向一段区域,A.m_data="windows",B.m_data=“linux";

如果未重写赋值函数,将B赋给A;则编译器会默认进行位拷贝,A.m_data=B.m_data

则A.m_data和B.m_data指向同一块区域,虽然A.m_data指向的内容会改变成"linux",但是这样容易出现这些问题:

(1):A.m_data原来指向的内存区域未释放,造成内存泄露。

(2):A.m_data和B.m_data指向同一块区域,任何一方改变都会影响另一方

(3):当对象被析构时,B.m_data被释放两次。

对于编译器,如果不主动编写拷贝函数和赋值函数,它会以“位拷贝”的方式自动生成缺省的函数。

如果重写赋值函数和拷贝构造函数后,

A.m_data=B.m_data,进行的是值拷贝,会将B.m_data的内容赋给A.m_data,A.m_data还是指向原来的内存区域,但是其内容改变。

 

位拷贝拷贝的是地址,而值拷贝则拷贝的是内容。

位拷贝就是传递的值是参数的地址,值拷贝就是传递的值是参数本身的值。

深拷贝拷贝的是对象,浅拷贝拷贝的是内存。

按位拷贝就是拷贝对象的时候实际会用像memcpy()这种来复制这块数据到目的对象处,按成员拷贝则要对这个类的每个成员逐一复制(这些成员可能想调用自己定义的拷贝函数). 这会比较慢.位拷贝速度快. 但语义上来说并不总是我们希望的. 所以它们也是各自有各自的用处.

参考:

http://topic.csdn.net/u/20081106/12/4ac743c8-99a2-4dd9-8532-3378e644a0f8.html?85412

C++中的拷贝拷贝探讨 拷贝是指将一个数据对象的所有(bit)复制到另一个对象中,不管对象的类型含义如何。拷贝适用于简单的数据类型或内存块的复制,而拷贝适用于大多数的数据类型,包括自定义的类类型。这种拷贝方式是根据对象的类型结构进行的,它考虑了对象的语义内部成员。最后,我们打印出源对象目标对象的,可以看到它们的是相同的。最后,我们打印出源对象目标对象的,可以看到它们的是相同的。需要注意的是,对于自定义的类类型,进行拷贝时会调用类的拷贝构造函数(如果有定义),以确保正确地复制对象的所有成员。 阅读详情

相关推荐

【OpenClaw从入门到精通】第12篇:OpenClaw 2026子代理实战全攻略:用ACP架构搭建多智能体协作网络(附完整代码)

本文聚焦OpenClaw 2026.3.2版本默认启用的ACP(Agent Communication Protocol)子代理机制,从核心概念、底层原理到企业级实操全流程拆解。先解析子代理的定义、ACP协议通信原理及主从代理分工逻辑,再提供环境准备的详细步骤(版本验证、配置调整、技能安装);随后通过三个递进式虚拟案例(客服分流、智能文档处理、企业级招聘全流程),提供可直接运行的完整代码、执行结果及技术要点解析;最后补充子代理管理运维、性能优化与避坑指南。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2320

C++中的拷贝拷贝

拷贝拷贝的是地址(也叫浅拷贝),而拷贝拷贝的是内容(深拷贝)。深拷贝拷贝可以简单理解为:如果一个类拥有资源,当这个类的对象发生复制过程的时候,资源重新分配,这个过程是深拷贝,反之,没有重新分配资源,是浅拷贝。   拷贝,及"bitwise assignment"是指将一个对象的内存映像按原封不动的复制给另一个对象,所谓拷贝是指,将原对象的复制一份给新对象。 在用"bitwise assignment"时会直接将对象的内存映像复制给另一个对象,这样两个对象会指向同一个内存区域,当一个对象被释放后,另一个对象的指针会成为空指针。这时,应该编写operator=copy co

ADS1298-ECG-STM32-master_基线漂移_心电基线_ads1298_心电系统_ECG-STM32_

简易的ECG+STM32心电信号采集系统,可实现标准12导联信号采集,同时支持针对基线漂移等去噪的与处理算法。

C++ 拷贝

分享一个C++的按拷贝的代码。

凡辰道 712

C++中的拷贝拷贝深拷贝拷贝

<br /><br />为了便于说明我们以String类为例:<br />首先定义String类,而并不实现其成员函数。<br /> Class String{<br />public:<br />    String(const char *ch=NULL);//默认构造函数<br />    String(const String &str);//拷贝构造函数<br />   ~String(void);<br />   String &operator=(const String &str);//赋

为了孩子他娘 904

深入C++ 之逐拷贝(bitwise copy)

深入C++ 之逐拷贝(bitwise copy) 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 最近有重新翻阅的侯捷老师的《深度探索C++对象模型》一书,依然别有新意源源涌来,不禁感叹经典书籍的魅力,...

heary29的专栏 2260

C++语言】字符串String类的深拷贝与浅拷贝

拷贝对象时,需要创建相同的字节序、类型、资源。

风铃子加油的博客 1961

C++分段拷贝字节

memcpy可以用来拷贝原资源到目标资源的指定长度的数据,但是不能只拷贝中间的一段数据。 如果拷贝中间一段的数据,此时可能就需要逐字节拷贝 void get_bytes(uint8_t* dst_bytes,uint8_t* source_bytes){ for (int i = 0; i < 4; i++) { for (int j = 0; j < 2; ++j) { *dst_bytes++ = *source_bytes+i*5+j+

努力的八戒 1260

C++细节 深拷贝拷贝(拷贝)详解

前提  在对象拷贝过程中,如果没有自定义拷贝构造函数,系统会提供一个缺省的拷贝构造函数,缺省的拷贝构造函数对于基本类型的成员变量,按字节复制,对于类类型成员变量,调用其相应类型的拷贝构造函数。 阅读《高质量的c c++编程》,第9章有这样一段话,类似的话在《c++primer》《effective C++》都有所提及,那就是拷贝构造函数问题,这个是类编写者的一个基础问题。 拷贝(浅...

编程爱好者的博客 5万+

C++ 深拷贝拷贝(拷贝)详解

前提  在对象拷贝过程中,如果没有自定义拷贝构造函数,系统会提供一个缺省的拷贝构造函数,缺省的拷贝构造函数对于基本类型的成员变量,按字节复制,对于类类型成员变量,调用其相应类型的拷贝构造函数。 阅读《高质量的c c++编程》,第9章有这样一段话,类似的话在《c++primer》《effecti...

文武傲群雄,彳亍定江山 399

拷贝拷贝、浅拷贝深拷贝

拷贝拷贝的是地址(也叫浅拷贝),而拷贝拷贝的是内容(也叫深拷贝)。 如果不主动编写拷贝构造函数函数,编译器将以“拷贝”的方式自动生成缺省的函数 现将 a赋给 b,缺省赋函数的“拷贝”意味着执行 b.m_data = a.m_data。这将造成三个错误: 一是 b.m_data 原有的内存没被释放,造成内存泄露; 二是b.m_data a.m_data 指向同一块内存,

除却猩猩不是猿 811
上一篇: C++ primer 第四版 习题3.13
下一篇: C++编程思想 require.h文件 程序代码
dfdssddfdf
博客等级 码龄15年 9粉丝 12原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值