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

对象优化及右值引用优化(一)

对象优化及右值引用优化

对象的函数调用时机

class Test {
public:Test(int val = 0) :val_(val) {cout << "Test::Test" << endl;}~Test(){cout << "Test::~Test" << endl;}Test(const Test& test){cout << "Test::Test(const Test& test)" << endl;val_ = test.val_;}Test& operator=(const Test& test){cout << "Test::operator=(const Test& test)" << endl;if (this == &test)return *this;val_ = test.val_;return *this;}
private:int val_;
};
构造函数的调用
 Test t1;Test t4 = Test(1); // Test(1)显示生成临时对象,生存周期:当前所在语句除了语句就析构。使用临时对象
  • Test t4 = Test(1) 被优化成Test t4(1)
  • Test(1)会产生一个临时对象,当出该语句的时候就析构该对象
拷贝构造函数的调用
 Test t2(t1);Test t3 = t1;
  • 产生一个新对象的时候使用对象对其初始化,调用拷贝构造
赋值函数调用
 t2 = t4;t1 = Test(1); // 显式临时对象的生成t2 = (Test)1; // 显式临时对象的生成t3 = 30;      // 隐式临时对象的生成
  • 对已经存在的对象进行赋值的时候,调用赋值函数
引用临时对象
const Test& ref = Test(20);//Test* p = &Test(10); // &后面接临时变量时不能取地址
  • 相当于为临时对象起了个别名,对象的生存周期延长
  • 临时对象不能使用&取地址
局部静态对象的构造函数调用时机
  • 最先在数据区为其开辟内存空间
  • 只要有在运行到该对象的构造函数调用点,才会调用该对象构造函数
  • 程序结束时,才调用该对象析构函数

RVO优化

G++ 编译器,在函数返回对象时候会将创建的临时变量优化掉,导致不会调用对应的拷贝构造函数。g++编译的时候可以使用下面命令关闭掉RVO优化,

-fno-elide-constructors
http://www.lryc.cn/news/478580.html

相关文章:

  • 江西省技能培训平台(逆向破解登录国密SM2)
  • 用万用表测量三极管:【判断是NPN\PNP+3极性】
  • StableDiffusion系列教程 | 什么是SD?SD能做什么?有哪些应用场景?
  • AutoCAD的Dwg版本代号、R版本参数值以及二次开发时VS、.NET版本关系
  • 解密可观测行业中的语义规范 — 代码世界中的“语言艺术”
  • esp32 ap httpsever 控制led
  • 告别复杂判断!Python中实现函数重载的终极技巧
  • Clang-Format:让你的代码整齐划一,格式不再烦恼
  • 【jvm】Full GC
  • 【Python】实战:请使用面向对象的思想,设计自定义类,描述出租车和家用轿车的信息
  • 互联网摸鱼日报(2024-11-07)
  • requests库
  • 大数据之多级缓存方案
  • QCon演讲实录|徐广治:边缘云原生操作系统的设计与思考
  • web第二次作业
  • 大模型技术讲解:大模型参数微调(大模型微调)
  • 测试自动化如何和业务流程结合?
  • Python进阶之IO操作
  • ubuntu如何卸载colmap
  • 【comfyui教程】ComfyUI即将迎来全新界面:升级体验就在11月15日
  • Leecode热题100-104.二叉树的最大深度
  • 深度学习中的 Dropout:原理、公式与实现解析
  • 【大数据学习 | HBASE】habse的表结构
  • 完成程序《大奖赛评分B》
  • K8S篇(基本介绍)
  • linux alsa-lib snd_pcm_open函数源码分析(三)
  • 基于ssm的个人健康管理系统
  • Debian下载ISO镜像的方法
  • 大厂面试真题-简单说说线程池接到新任务之后的操作流程
  • 「Mac畅玩鸿蒙与硬件23」鸿蒙UI组件篇13 - 自定义组件的创建与使用