C++11介绍之移动构造函数、move函数和右值引用
移动构造函数和右值引用是C11新增的特性可以减少资源开销提升效率。右值引用首先给一个右值引用声明的例子​ std::string r5(Hello World!!);这里右值引用r5绑定了一个临时变量临时变量的内容为Hello World!!,右值引用只可以绑定临时变量也就是右值而左值有地址的变量是不可以的例如如下操作是允许的r5 abcdefg;而如下操作是不允许的std::string strtest(Hello World!!); std::string r4{ strtest }; //不可以,strtest是左值move函数std::move: 并不能移动任何东西,只是将一个左值强制转化为右值引用继而可以通过右值引用使用该值以用于移动语义从实现上讲std::move基本等同于一个类型转换static_castT(lvalue);移动构造函数移动构造函数用于当复制构造函数的参数为右引用的时候之所以叫移动是因为新生成对象并不会重新申请内存而是会直接使用拷贝对象的内存而拷贝的对象通过对应指针赋值为NULL从而失去对原有内存的控制。实例下面通过一个实例来说明其工作原理#include iostream #include cstring #include cstdlib #include vector using namespace std; class Str{ public: char *str; Str(char value[]) { coutorigin construct function...endl; str NULL; int len strlen(value); str new char[len 1]; memset(str,0,len 1); strcpy(str,value); } Str(const Str s) { coutcopy construct function...endl; str NULL; int len strlen(s.str); str new char[len 1]; memset(str,0,len 1); strcpy(str,s.str); } Str(Str s) { coutmove construct function...endl; str s.str; s.str NULL; } ~Str() { coutdestruct funciton...endl; if(str ! NULL) { std::cout delete str... std::endl; delete []str; str NULL; } else { std::cout str is null... std::endl; } } }; int main() { char value[] Hello Word!; coutstep 1endl; Str s(value); coutstep 2endl; Str ss(move(s)); coutstep 3endl; Str ss1 ss; coutstep 4endl; Str ss2 static_castStr(ss1); coutfinishendl; return 0; }结果如下step 1 origin construct function... step 2 move construct function... step 3 copy construct function... step 4 move construct function... finish destruct funciton... delete str... destruct funciton... str is null... destruct funciton... delete str... destruct funciton... str is null...step1:声明一个类对象调用原始构造函数即可step2:由于move将对象变量转换为右值引用因此调用移动构造函数可以看下移动构造函数写法以及如何将内存转为自己的step3:调用原始复制构造函数step4:同样调用移动构造函数,可以看到static_castT(lvalue)和move函数的作用是一样的。然后我们看一下析构函数的调用一共创建4个对象申请了两块内存所以调用4次析构函数但实际就释放两块内存。

相关新闻

2026年自己做一个小程序商城怎么做?工具选择、搭建步骤与运营

2026年自己做一个小程序商城怎么做?工具选择、搭建步骤与运营

一、引言:从“自己拖拽页面”到“自己持续经营”,自助搭建要看完整能力自己做一个小程序商城,并不意味着所有环节都要从零写代码。对多数中小商家来说,更现实的方式是使用标准化后台配置商品、订单、支付、会员和页面,…

2026/8/7 23:06:35 阅读更多 →
如何通过zotero-style插件让文献管理变得生动有趣:5个视觉化创新功能

如何通过zotero-style插件让文献管理变得生动有趣:5个视觉化创新功能

如何通过zotero-style插件让文献管理变得生动有趣:5个视觉化创新功能 【免费下载链接】zotero-style Ethereal Style for Zotero 项目地址: https://gitcode.com/GitHub_Trending/zo/zotero-style 还在为枯燥的文献管理界面感到疲惫吗?zotero-sty…

2026/8/7 23:06:35 阅读更多 →
WeChatMsg:如何用开源工具实现微信聊天记录的永久保存与智能分析?

WeChatMsg:如何用开源工具实现微信聊天记录的永久保存与智能分析?

WeChatMsg:如何用开源工具实现微信聊天记录的永久保存与智能分析? 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/Gi…

2026/8/7 23:06:35 阅读更多 →

最新新闻

别再给全公司乱买大模型账号了。聊句心里话:企业究竟需要什么样的 AI?

别再给全公司乱买大模型账号了。聊句心里话:企业究竟需要什么样的 AI?

前两天,我和一位做传统制造的老板喝茶。他满脸苦笑地跟我吐槽:“去年底我脑子一热,给全公司买了几十个主流大模型的企业版账号。刚开始那一个星期,大家图新鲜,天天跟 AI 聊天。现在你猜怎么着?后台一看&…

2026/8/8 0:05:12 阅读更多 →
FastAPI 接入异步 PostgreSQL 完成任务 CRUD 与数据库迁移

FastAPI 接入异步 PostgreSQL 完成任务 CRUD 与数据库迁移

内存列表写起来很轻松,服务一重启,昨天创建的任务就像没发生过。真正麻烦的还不只是丢数据,多个请求同时改一条任务时,列表也没有事务可言。这一篇把第一篇的接口换成 PostgreSQL,并让迁移脚本替我们记录表结构的变化。…

2026/8/8 0:05:12 阅读更多 →
FastAPI 写出第一个任务 API 路由、参数校验与自动文档

FastAPI 写出第一个任务 API 路由、参数校验与自动文档

下午临时接到一个需求,产品只留下一句话,做一个能新增、查看和完成任务的接口。要是从路由、校验、接口文档全都手写,半天大概就没了。FastAPI 有意思的地方在于,Python 类型标注已经把这些信息写了一半。 配套代码已经放在 fast…

2026/8/8 0:05:12 阅读更多 →
UE5 GAS实战:GameplayEffect实现RPG药水效果(治疗、回蓝、Buff)

UE5 GAS实战:GameplayEffect实现RPG药水效果(治疗、回蓝、Buff)

1. 项目概述:从一瓶药水开始,理解GAS的核心玩法 在UE5里做RPG,给角色加血加蓝、上Buff,听起来是基础得不能再基础的需求。但当你真正上手,想把一瓶“治疗药水”的效果做扎实时,往往会发现事情没那么简单。是…

2026/8/8 0:05:12 阅读更多 →
昇腾AI代理实现多号通话自动化

昇腾AI代理实现多号通话自动化

基于昇腾(Ascend)硬件与AtomGit AI社区的开源生态,结合AI Agent技术,可以实现一个模拟“通话重复使用机号复制”功能的安卓手机应用原型。其核心是利用AI Agent进行意图理解、任务编排和自动化操作,模拟或管理多号码的…

2026/8/8 0:04:11 阅读更多 →
Java图像处理实战指南

Java图像处理实战指南

要执行这些 Java AWT 图像处理程序,你需要将它们分别保存为独立的 .java 文件,并使用 javac 编译,然后使用 java 运行。以下是每个程序的核心执行步骤、依赖关系和要点。 通用执行步骤 保存文件:将每个 listing 的代码复制到文本…

2026/8/8 0:04:11 阅读更多 →

日新闻

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

当下AI应用飞速普及,无数企业下场搭建智能体系统,可落地阶段难题接踵而至:上下文无限堆积频繁爆栈、AI工具调用准确率低下、Token成本居高不下、企业数据权限混乱暗藏安全隐患……很多团队卡在架构搭建环节,空有前沿技术概念&…

2026/8/8 0:00:07 阅读更多 →
PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码 【免费下载链接】php-qrcode A PHP QR Code generator and reader with a user-friendly API. 项目地址: https://gitcode.com/gh_mirrors/ph/php-qrcode 在当今数字时代,二维码已…

2026/8/8 0:00:08 阅读更多 →
UniApp微信小程序隐私保护组件开发:从原理到实战

UniApp微信小程序隐私保护组件开发:从原理到实战

1. 项目缘起:为什么我们需要一个隐私保护通用组件?最近在维护一个基于uniapp开发的微信小程序矩阵时,我遇到了一个非常棘手的问题。随着平台对用户隐私保护的要求越来越严格,几乎每一个新版本发布,或者在某些特定机型&…

2026/8/8 0:00:08 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/6 22:02:27 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/7 23:24:08 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/7 17:02:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/7 23:54:54 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/7 17:02:36 阅读更多 →