当前位置: 首页 > news >正文

跟我学C++中级篇——处理对象的复制

一、对象的传递

在应用程序中,经常会遇到不同线程或不同模块间需要进行对象的传递,本来传递不是什么多大的事。但问题是,如果对象的值大到一定的程度后,传递不是问题可对象值的处理反而成了问题了。举一个现实世界的例子,用人传递物品,如果是一个水果,一个手机之类的简单东西,那么几乎不会耗费什么精力和时间。但如果让人代传一吨水果,一车手机怎么办?传递本身不是主要的了,主要的是货物如何进行运输了。
而在计算机世界中,对象的传递也是如此,大对象的处理就成为了一个主要的问题。

二、类对象的拷贝

几乎在所有的学习C++编程的开发者中,都接触过类的拷贝过程中的深拷贝和浅拷贝的问题。这也是在面试过程中,让面试者编写string类的一个面试点。而通过这个面试点,则可引出类的拷贝问题,包括拷贝构造函数、拷贝赋值函数,当然C++11后也包括移动构造函数、移动构造函数和移动赋值函数。这也就是前面的文章中提到的“三五法则”(本文不谈论拷贝函数等的具体实现,也不对三五法则进行展开分析,有兴趣的可以参看前面的相关内容。)。
对象的拷贝,其实就是如何正确处理对象内容特别是数据的拷贝,如果涉及到对象内部的对象变量则也可以如此认为。

三、内存的拷贝

在参数的传递过程中,除了有对象的拷贝,还有数组等的传递,如果把它们都当成对象的话,则可以统一到对象的拷贝或者说大对象的拷贝。大对象的拷贝,本质其实就是内存的拷贝,无论是在堆上还是栈上,原理基本都是一样的,所谓大对象其实就是内存占用的多罢了。
既然明白了对象和内存拷贝最终其实是一致的后,就会明白了如何对对象传递的优化。

四、常见的优化手段

对象或内存的优化手段常见的有如下几种手段或者说方法:
1、使用C++标准中的方法
1)引用或指针传递:这种比较简单,也是开发者经常使用的,不过需要注意与const的配合使用
2)使用移动语义:这个只能是在C++11标准后,其它倒没什么
2、借助编译器的优化
1)返回值优化(RVO或NRVO):这个在前面分析过,大家也可以查看相关的资料
2)尾调优化(TCO):这个才刚刚分析过,有兴趣可以看一下
3、使用库或框架
1)使用类似于STL中的std::swap方法
2) 使用类似于对象池或内存池的方法或手段
4、使用一些策略
比较常见的就是COW,写时复制、零拷贝等。前面反复分析过,此处不再展开。
上面的手段后,有的是可以避免内存的复制的方法,有的则是一种优化的策略,特别是对COW这种,其实就是一种平衡的手段。另外,零拷贝则是一种优化的抽象,具体到不同的具体场景可能是有所不同的。

五、总结

本文可以说是对前面的一系列的相关文章的总结,如果只是看这一篇,可能有务虚的感觉。大家可以把本文做为一篇阅读的目录或大纲,逐一展开去学习或分析即可。当然,不是每个开发者对这些内容都感兴趣,大家只要根据自己情况决定即可。

相关文章:

跟我学C++中级篇——处理对象的复制

一、对象的传递 在应用程序中,经常会遇到不同线程或不同模块间需要进行对象的传递,本来传递不是什么多大的事。但问题是,如果对象的值大到一定的程度后,传递不是问题可对象值的处理反而成了问题了。举一个现实世界的例子&#xf…...

基于PyQt5实现仿QQ-第二章-用户登录

基于PyQt5实现仿QQ-第二章-用户登录 Author: Daydreamer 项目简介 本项目基于PyQt5仿照目前流行的即时通信软件QQ,实现了新用户注册、用户登录、自动登录、记住多用户账号、用户搜索、添加好友、好友间聊天(消息持久化、同步化)等功能。 …...

[OS_8] 终端和 UNIX Shell | 会话和进程组 | sigaction | dash

我们已经知道如何用 “文件描述符” 相关的系统调用访问操作系统中的对象:open, read, write, lseek, close。操作系统也提供了 mount, pipe, mkfifo 这些系统调用能 “创建” 操作系统中的对象。 当然,我们也知道操作系统中的对象远不止于此&#xff0…...

IP查询专业版:支持IPv4/IPv6自动识别并切换解析的API接口使用指南

以下是根据您提供的网页内容编辑的符合CSDN内容发布要求的Markdown格式文本: 一、API概述 在开发过程中,我们常常需要对IP地址进行查询,以获取其详细信息,如地理位置、运营商等。万维易源的“IP查询专业版”API接口能够提供丰富…...

ESG跨境电商如何为国内的跨境电商企业打开国外的市场

现在不管是国内还是国外,做电商的企业都非常的多,那么既然有这么多大电商公司,就要有为这些电商公司提供服务的公司,这就是ESG,它是专门为跨境电商服务的公司,那么这家公司的主要业务是什么呢?它…...

建筑节能成发展焦点,楼宇自控应用范围持续扩大

在全球能源危机日益严峻、环保意识不断增强的大环境下,建筑节能已成为建筑行业发展的核心议题。从大型商业综合体到普通住宅,从公共建筑到工业厂房,节能需求贯穿建筑全生命周期。而楼宇自控系统凭借其对建筑设备的智能化管理和精准调控能力&a…...

中国矿业大学iGMAS分析中心介绍

一、关于GNSS和iGMAS 在浩瀚的太空中,全球卫星导航系统(GNSS)构建起精准定位的时空基准。IGMAS——国际GNSS监测评估系统,是由中国倡导并主导建设的全球GNSS监测网络,旨在提供高精度、高可靠的导航、定位与授时服务。 …...

python如何取消word中的缩进

在python-docx中,取消缩进可以通过将相应的缩进属性设置为None或0来实现。以下是取消不同类型缩进的方法: 取消左缩进 from docx import Documentdoc Document(existing_document.docx)for paragraph in doc.paragraphs:# 取消左缩进paragraph.paragr…...

Lesar: 面向 Lustre/Scade 语言的形式化模型检测工具

在《同步反应式系统》的第一课中,介绍了同步数据流语言 Lustre 生态中的形式化模型检查器 Lesar 的用法。Lesar 可对 lustre v4 语言以及 Scade 语言中部分数据流核心特性进行模型检查。 Lesar 介绍 Lesar 是 Verimag 研发维护的形式化方法模型检查工具。该工具的理…...

YOLOv12 改进有效系列目录 - 包含卷积、主干、检测头、注意力机制、Neck上百种创新机制 - 针对多尺度、小目标、遮挡、复杂环境、噪声等问题!

🔥 在 YOLO 系列一路狂飙之后,YOLOv12 带来了令人耳目一新的范式转变——它不再以 CNN 为绝对核心,而是首次 围绕注意力机制构建 YOLO 框架,在保证实时性的前提下,将检测精度再次推向新高度! 为了进一步探…...

STM32 I2C总线通信协议

引言 在嵌入式系统开发领域,I2C(Inter-Integrated Circuit)总线作为经典的双线制串行通信协议,凭借其简洁的物理层设计和灵活的通信机制,在传感器互联、存储设备控制、显示模块驱动等场景中占据重要地位。本文将深入剖…...

多物理场耦合低温等离子体装置求解器PASSKEy2

文章目录 PASSKEy2简介PASSKEY2计算流程PASSKEy2 中求解的物理方程电路模型等离子体模型燃烧模型 PASSKEy2的使用 PASSKEy2简介 PASSKEy2 是在 PASSKEy1 的基础上重新编写的等离子体数值模拟程序。 相较于 PASSKEy1, PASSKEy2 在具备解决低温等离子体模拟问题的能力…...

【Harmony_Bug】forEach + asyncawait 的异步陷阱

一、问题描述 今天在做一个RDB的小项目时,遇到一个问题,因为没报错其实也是不算是BUG,以下描述时我就直接说关键点,其他代码忽略。 我的数据模型初始化有六条数据如图 在持久化层,通过initUserData这个方法执行插入。…...

智慧医院建设的三大关键领域

智慧医院建设是医疗行业数字化转型的核心载体,其本质是通过新一代信息技术重构医疗服务模式、优化管理流程、提升患者体验。在当前医疗资源供需矛盾突出的背景下,智慧医院建设已从单纯的设备智能化向系统性变革演进,主要集中在以下三大关键领…...

雷电模拟器怎么更改IP地址

游戏搬砖会使用雷电模拟器多开窗口,若模拟器窗口开多了,IP地址是一样的就怕有限制,很容易被游戏后台检测到。在雷电模拟器中更改IP地址可以通过以下方法实现: 方法一:通过模拟器内设置代理 1. 打开雷电模拟器 启动雷…...

软件编程命名规范

编程命名规范是保证代码可读性、可维护性和团队协作效率的重要基础。以下是涵盖主流编程语言的通用命名规范,结合行业最佳实践和常见规范(如Google、Microsoft、Airbnb等风格指南): 一、通用命名原则 清晰优先:名称应…...

#什么是爬虫?——从技术原理到现实应用的全面解析 VI

什么是爬虫?——从技术原理到现实应用的全面解析 V 二十六、异构数据采集技术突破 26.1 PDF文本与表格提取 import pdfplumber import pandas as pddef extract_pdf_data(pdf_path):"""从PDF中提取文本和表格数据:param pdf_path: PDF文件路径:return: 包含…...

芯岭技术XL32F003单片机 32位Cortex M0+ MCU简单介绍 性能优异

XL32F003单片机是深圳市芯岭技术有限公司的一款基于 32 位 ARM Cortex-M0 内核的高性能微控制器,提供SOP8/SOP14/SOP16/TSSOP20/SSOP24/QFN20/QFN32多种封装可选,可满足不同设计需求。XL32F003可用于工业控制、手持设备、PC 外设、传感器节点等应用场景&…...

使用浏览器的Clipboard API实现前端复制copy功能

在前端开发中,复制文本到剪贴板的功能通常使用浏览器的 Clipboard API 实现。比如 navigator.clipboard.writeText 方法。以下是一个简单的案例,展示如何使用 Clipboard API 实现复制文本的功能。 基本用法 首先,你需要创建一个按钮&#x…...

Struts2框架学习

文章目录 基础实战配置文件NameSpaces 基础 实战 配置文件 文件1&#xff1a; <?xml version"1.0" encoding"UTF-8"?> // 声明这是一个 XML 文件&#xff0c;且使用 UTF - 8 编码 <!DOCTYPE struts PUBLIC"-//Apache Software Foundat…...

React 实现爱心花园动画

主页&#xff1a; import React, { useEffect, useRef, useState } from react; import /assets/css/Love.less; import { Garden } from /utils/GardenClasses;// 组件属性接口 interface LoveAnimationProps {startDate?: Date; // 可选的开始日期messages?: { // 可…...

CAPL编程_03

1_文件操作的相关函数&#xff1a; 读文本文件内容 读取文本文件操作的三部曲 1&#xff09;打开文件 —— openFileRead ( ) 2&#xff09;逐行读取 —— fileGetString ( ) 、fileGetStringSZ ( ) 3&#xff09;关闭文件 —— fileClose ( ) char content[100];…...

网络准入控制系统:2025年网络安全的坚固防线

在当今数字化时代&#xff0c;网络安全已成为至关重要的议题。阳途网络准入控制系统作为保障网络安全的关键机制&#xff0c;发挥着不可替代的作用。 阳途网络准入控制系统核心目的在于确保只有合法、合规的设备与用户能够接入网络。从本质上讲&#xff0c;它通过一系列技术手段…...

【音视频】⾳频处理基本概念及⾳频重采样

一、重采样 1.1 什么是重采样 所谓的重采样&#xff0c;就是改变⾳频的采样率、sample format、声道数等参数&#xff0c;使之按照我们期望的参数输出。 1.2 为什么要重采样 为什么要重采样? 当然是原有的⾳频参数不满⾜我们的需求&#xff0c;⽐如在FFmpeg解码⾳频的时候…...

自然语言处理将如何颠覆未来教育?个性化学习新纪元

教育领域正经历着自印刷术发明以来最深刻的变革。自然语言处理&#xff08;NLP&#xff09;技术突破传统教育框架的桎梏&#xff0c;正在重塑人类知识传递的基本范式。这场变革的实质不在于教学工具的数字化升级&#xff0c;而在于重新定义了"教"与"学"的本…...

4月25日星期五今日早报简报微语报早读

4月25日星期五&#xff0c;农历三月廿八&#xff0c;早报#微语早读。 1、祝贺&#xff01;神舟二十号载人飞船发射取得圆满成功&#xff1b; 2、文旅部&#xff1a;今年一季度国内出游人次17.94亿&#xff0c;同比增长26.4%&#xff1b; 3、2025五一档新片预售票房破1000万&…...

秒级到毫秒:BFD的速度革命

一、BFD技术概述 ​​双向转发检测&#xff08;BFD&#xff09;​​是一种轻量级的网络协议&#xff0c;专门用于快速检测、监控网络链路或IP路由的连通性状态。作为网络领域的"心跳检测器"&#xff0c;BFD通过毫秒级&#xff08;默认1000ms&#xff09;的快速探测机…...

systemctl 命令详解与常见问题解决

在 Linux 系统中&#xff0c;service 命令和 chkconfig 命令一直用于管理服务&#xff0c;但随着 systemd 的引入&#xff0c;systemctl 命令逐渐成为主流。systemctl 命令不仅功能强大&#xff0c;而且使用简单。本文将详细介绍 systemctl 命令的作用以及常见问题的解决方法。…...

5.6 Microsoft Semantic Kernel:专注于将LLM集成到现有应用中的框架

5.6.1 Semantic Kernel概述 Microsoft Semantic Kernel&#xff08;以下简称SK&#xff09;是一个开源的软件开发工具包&#xff08;SDK&#xff09;&#xff0c;旨在帮助开发者将大型语言模型&#xff08;LLM&#xff09;无缝集成到现有的应用程序中。它支持C#、Python和Java…...

vite+vue构建的网站项目localhost:5173打不开

原因&#xff1a;关掉了cmd命令提示符&#xff0c;那个端口就没有被配置上&#xff0c;打开就是这样的。 解决方法&#xff1a;重新在工作目录下打开cmd&#xff0c;输入npm run dev重新启动项目。 重新出现这样的界面说明已经成功启动项目&#xff0c;再次在浏览器中刷新并输入…...

电脑屏幕录制软件Captura源码编译(Win10,VS2022)

屏幕录像的意义&#xff1a; 教育教学方面 制作教学资源&#xff1a;教师可以通过录制屏幕来制作教学视频&#xff0c;演示软件操作、讲解复杂的知识点等。学生可以随时观看这些视频&#xff0c;便于复习和巩固知识&#xff0c;尤其对于一些抽象的概念或难以在课堂上一次性掌握…...

【版本控制】SVN + TortoiseSVN版本管理实用教程(附安装+开发常用操作)

摘要&#xff1a; 本文将带你从零开始掌握 SVN 版本控制系统&#xff0c;结合 TortoiseSVN 图形客户端工具&#xff0c;深入学习包括安装、检出、提交、更新、回滚、冲突解决等常用开发操作&#xff0c;快速上手团队协作&#xff01; &#x1f9e9; 什么是 SVN&#xff1f; SV…...

常见网络安全攻击类型深度剖析(二):SQL注入攻击——原理、漏洞利用演示与代码加固方法

常见网络安全攻击类型深度剖析(二):SQL注入攻击——原理、漏洞利用演示与代码加固方法 在Web应用安全领域,SQL注入(SQL Injection)是历史最悠久、危害最广泛的攻击类型之一。据OWASP(开放式Web应用安全项目)统计,SQL注入连续多年稳居“OWASP Top 10”漏洞榜单前列,每…...

DeepSeek智能时空数据分析(三):专业级地理数据可视化赏析-《杭州市国土空间总体规划(2021-2035年)》

序言&#xff1a;时空数据分析很有用&#xff0c;但是GIS/时空数据库技术门槛太高 时空数据分析在优化业务运营中至关重要&#xff0c;然而&#xff0c;三大挑战仍制约其发展&#xff1a;技术门槛高&#xff0c;需融合GIS理论、SQL开发与时空数据库等多领域知识&#xff1b;空…...

day49—双指针+贪心—验证回文串(LeetCode-680)

题目描述 给你一个字符串 s&#xff0c;最多 可以从中删除一个字符。 请你判断 s 是否能成为回文字符串&#xff1a;如果能&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;s "aba" 输出&#xff1a;true…...

AI电视里的达摩

2025年&#xff0c;所有电视都搭载了AI功能&#xff0c;所有电视厂商都在宣传AI能力。但问题是&#xff0c;消费者依旧没有对AI电视做出什么积极的回应。“AI电视是鸡肋”“AI只是电视的又一轮泡沫”等观点层出不穷。 为什么明明AI技术能够解决电视的很多问题&#xff0c;但AI电…...

算力网络(CFN)在跨校联合科研中的应用:安全性挑战与联邦调度实践

引言&#xff1a;科研协作的算力困境 上海交通大学与麻省理工学院联合开展的高能物理模拟实验&#xff0c;因算力资源分配不均导致部分节点连续72小时处于空转状态。这个典型案例揭示了当前跨机构科研协作的痛点&#xff1a;‌算力资源无法实现安全可信的细粒度共享‌。算力网…...

面向对象编程核心:封装、继承、多态与 static 关键字深度解析

面向对象编程核心&#xff1a;封装、继承、多态与 static 关键字深度解析 一、封装&#xff1a;数据安全与接口规范 1. 封装的本质与作用 核心定义&#xff1a;将数据&#xff08;属性&#xff09;与操作数据的方法&#xff08;行为&#xff09;绑定在类中&#xff0c;隐藏内…...

c++进阶——类与继承

文章目录 继承继承的基本概念继承的基本定义继承方式继承的一些注意事项 继承类模板 基类和派生类之间的转换继承中的作用域派生类的默认成员函数默认构造函数拷贝构造赋值重载析构函数默认成员函数总结 不能被继承的类继承和友元继承与静态成员多继承及其菱形继承问题继承模型…...

【CODEMATE】进制转换(transform) 粤港澳青少年信息学创新大赛 C/C++/Python 解题思路

目录 问题描述做题思路&#xff0c;解决过程思路&#xff1a;踩过的坑&#xff1a;核心代码C 语言 / C 切片&#xff1a;C 语言 / C 判断 ‘A’ 数量&#xff1a;Python 切片&#xff1a;Python 判断 ‘A’ 数量&#xff1a; 完整代码C 语言 完整代码C 完整代码Python 完整代码…...

window和ubuntu自签证书

window下 以管理员身份 运行 Windows PowerShell # CN192.168.0.100 (换成自己的IP或者域名) # O(组织) OU(组织单位) # Cert:\LocalMachine\My&#xff1a;证书存储位置 # test_10&#xff1a;自定义证书名称 .AddYears(10): 证书过期时间 10 年 $cert New-SelfSi…...

ES历史版本下载

下载地址 Past Releases of Elastic Stack Software | Elastic 安装步骤参考 windows 安装 Elasticsearch_windows安装elasticsearch-CSDN博客...

技术面试一面标准流程

0. 自我介绍 ...... 1. 拷打项目 项目干了啥&#xff1f; 难点是啥&#xff1f; 问项目中用到的东西&#xff1f; 扩展&#xff1f; ...... 2. 基础知识 数据结构、C基础、设计模式 数据结构&#xff1a; 堆&#xff1f; unordered_map 和 布隆过滤器 都是用于查找…...

第14篇:Linux设备驱动程序入门<一>

Q&#xff1a;如何简单的理解DE1-SoC-UP Linux系统的设备驱动程序&#xff1f; A&#xff1a;设备驱动程序&#xff08;Device Driver&#xff09;&#xff0c;简称驱动程序&#xff08;Driver&#xff09;。DE1-SoC-UP Linux系统中的设备驱动程序允许系统软件与DE1-SoC开发板…...

软件设计模式与体系结构:基于Java实现管道-过滤器架构

软件设计模式与体系结构&#xff1a;基于Java实现管道-过滤器架构 前言 在软件架构中&#xff0c;数据流风格是一种常见的架构模式&#xff0c;特别适用于需要对数据进行一系列处理的场景。管道-过滤器&#xff08;Pipe and Filter&#xff09;*架构是数据流风格的典型代表&a…...

Node.js 包管理工具介绍

Node.js 包管理工具介绍 Node.js 是一个基于 Chrome V8 JavaScript 引擎的服务器端运行环境&#xff0c;它允许开发者使用 JavaScript 进行后端开发。为了方便管理和维护项目中使用的第三方库和模块&#xff0c;Node.js 提供了多种包管理工具。本文将详细介绍几种常用的 Node.…...

Node.js 应用场景

Node.js 应用场景 引言 Node.js 是一个基于 Chrome V8 JavaScript 引擎的开源、跨平台 JavaScript 运行环境。它主要用于服务器端开发&#xff0c;通过非阻塞 I/O 模型实现了高并发处理能力。本文将详细介绍 Node.js 的应用场景&#xff0c;帮助你了解其在实际项目中的应用。…...

C/C++线程详解

一、C语言线程创建&#xff08;POSIX线程&#xff09; 1. 基本创建方法 POSIX线程&#xff08;pthread&#xff09;是C语言中创建线程的标准API&#xff1a; #include <pthread.h> #include <stdio.h>void* thread_func(void* arg) {printf("Thread runnin…...

动态ip与静态ip的概念、区别、应用场景

动态ip与静态ip的区别 前言 一、IP地址的概念和作用 1.1、IP地址的定义 1.2、IP地址的作用 二、动态IP和静态IP的区别 2.1、动态IP和静态IP的定义 2.2、动态IP和静态IP的特点 2.3、动态IP和静态IP的优缺点比较 三、动态IP和静态IP的应用场景 3.1. 动态IP的应用场景 3.2. 静态IP…...

P12167 [蓝桥杯 2025 省 C/Python A] 倒水

P12167 [蓝桥杯 2025 省 C/Python A] 倒水 题目描述 小蓝有 n n n 个装了水的瓶子&#xff0c;从左到右摆放&#xff0c;第 i i i 个瓶子里装有 a i a_i ai​ 单位的水。为了美观&#xff0c;小蓝将水循环染成了 k k k 种颜色&#xff0c;也就是说&#xff0c;第 i i i …...