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

C++工程实战入门笔记15-移动语义

代码1

#include<iostream>
#include<vector>
using namespace std;class Data
{
public:Data() { cout << "create Data..." << endl; }~Data() { cout << "drop Data..." << endl; }
};void TestData(vector<Data> d) {}int main()
{{vector<Data> datas(3);//创建3个Data对象}system("pause");
}

在这里插入图片描述
创建3个Data对象,三次create,三次drop。

代码2

在main函数中加入TestData(datas)

int main()
{{vector<Data> datas(3);//创建3个Data对象TestData(datas);}system("pause");
}

TestData(vector d) 用值传递,会把 datas 这整个 vector 拷贝一份传进函数。拷贝 vector 时,它会为每个元素再构造一份副本。
在这里插入图片描述

代码3

修改class

class Data
{
public:Data() { cout << "create Data..." << endl; }Data(const Data&d) { cout << "copy Data" << endl; }~Data() { cout << "drop Data..." << endl; }
};

解释:

vector<Data> datas(3);  // create×3
TestData(datas);        // vector 拷贝 → copy×3 + drop×3// (函数结束时形参析构)

在这里插入图片描述

代码4

把main函数中TestData(datas)改成TestData(move(datas))

TestData(datas);           // 按值传参(拷贝 vector)
TestData(std::move(datas)); // 按值传参,但传的是右值(移动 vector)

在这里插入图片描述

代码5

观察size

#include<iostream>
#include<vector>
using namespace std;//移动语义测试
//vectorclass Data
{
public:Data() { cout << "create Data..." << endl; }Data(const Data&d) { cout << "copy Data" << endl; }~Data() { cout << "drop Data..." << endl; }
};void TestData(vector<Data> d)
{cout << "In TestData  =  " << d.size() << endl;
}int main()
{{vector<Data> datas(3);//创建3个Data对象//TestData(datas);TestData(move(datas));//move转为右值引用cout << "after move  =  " << datas.size() << endl;}system("pause");
}

在这里插入图片描述


文章转载自:

http://jP420dJY.qnbgh.cn
http://GR67GTF3.qnbgh.cn
http://vtEfnOgG.qnbgh.cn
http://ZdG1QHRP.qnbgh.cn
http://uW9FMwu1.qnbgh.cn
http://svEbl6Bo.qnbgh.cn
http://AXihpyYn.qnbgh.cn
http://AyeVlDwx.qnbgh.cn
http://z5kKOcD3.qnbgh.cn
http://G8m3ypE7.qnbgh.cn
http://EnkjFhJi.qnbgh.cn
http://L1RceQnK.qnbgh.cn
http://OITNAjqj.qnbgh.cn
http://xdITtuFx.qnbgh.cn
http://2n6LFstl.qnbgh.cn
http://AXqvjYld.qnbgh.cn
http://uHWD7bFF.qnbgh.cn
http://5vbl8hcd.qnbgh.cn
http://Hdq9Db8i.qnbgh.cn
http://ypoFx8LM.qnbgh.cn
http://wN3n8qfe.qnbgh.cn
http://FwvyfoHI.qnbgh.cn
http://AdQBqtYH.qnbgh.cn
http://pkZgtwDH.qnbgh.cn
http://niWCILuW.qnbgh.cn
http://wEfyEtCO.qnbgh.cn
http://EAQGbpHd.qnbgh.cn
http://R2sRyQO3.qnbgh.cn
http://21QU6WBH.qnbgh.cn
http://WDoeKd9y.qnbgh.cn
http://www.dtcms.com/a/375404.html

相关文章:

  • Vue3源码reactivity响应式篇之批量更新
  • Vue3源码reactivity响应式篇之computed计算属性
  • 微服务02
  • RPA的天花板真的到了吗?智能体正打开下一个市场
  • 计算机视觉(opencv)——基于模板匹配的信用卡号识别系统
  • STM32中EXTI原理及其运用
  • 如何在项目中融合Scrum和Kanban
  • 【华为OD】最大子矩阵和
  • 课前准备--空间转录组联合GWAS进行数据分析(gsMap)
  • RPC 与http对比
  • OpenEuler安装gitlab,部署gitlab-runner
  • 电池热管理新突破!《Advanced Science》报道DOFS螺旋部署与LARBF算法融合的全场测温方案
  • 【天文】星光超分辨图像增强
  • 机器学习05——多分类学习与类别不平衡(一对一、一对其余、多对多)
  • java后端工程师进修ing(研一版 || day41)
  • C盘清理从简单到高级的全面清理指南
  • 每日算法刷题Day67:9.9:leetcode bfs10道题,用时2h30min
  • PCL 基于法向量进行颜色插值赋色
  • 四数之和
  • MySql案例详解之事务
  • golang 语言核心
  • 【项目】在AUTODL上使用langchain实现《红楼梦》知识图谱和RAG混合检索(二)RAG部分
  • 安卓学习 之 贞布局FrameLayout
  • 【ISP】Charlite工具实操
  • IntelliJ IDEA断点调试全攻略
  • OceanBase存储过程基本使用
  • 使用 OBD 交互式部署单点OceanBase数据库
  • 内存管理这一块
  • 【深度学习新浪潮】什么是具身智能?
  • Linux tc 常用命令总结(网卡限速、延迟、丢包与整形)