首页 > 其他分享 >40.什么情况下会调用拷贝构造函数

40.什么情况下会调用拷贝构造函数

时间:2023-07-03 21:45:36浏览次数:39  
标签:返回 调用 40 发生 下会 拷贝 构造函数

40.什么情况下会调用拷贝构造函数

  • 用类的一个实例化对象去初始化另一个对象的时候
  • 函数的参数是类的对象时(非引用传递)
  • 函数的返回值是函数体内局部对象的类的对象时 ,此时虽然发生(Named return Value优化)NRV优化,但是由于返回方式是值传递,所以会在返回值的地方调用拷贝构造函数

另:第三种情况在Linux g++ 下则不会发生拷贝构造函数,不仅如此即使返回局部对象的引用,依然不会发生拷贝构造函数

总结就是:即使发生NRV优化的情况下,Linux+ g++的环境是不管值返回方式还是引用方式返回的方式都不会发生拷贝构造函数,而Windows + VS2019在值返回的情况下发生拷贝构造函数,引用返回方式则不发生拷贝构造函数

在C++编译器发生NRV优化,如果是引用返回的形式则不会调用拷贝构造函数,如果是值传递的方式依然会发生拷贝构造函数。

在VS2019下进行下述实验:

举个例子:

class A
{
public:
	A() {};
	A(const A& a)
	{
		cout << "copy constructor is called" << endl;
	};
	~A() {};
};

void useClassA(A a) {}

A getClassA()//此时会发生拷贝构造函数的调用,虽然发生NRV优化,但是依然调用拷贝构造函数
{
	A a;
	return a;
}


//A& getClassA2()//  VS2019下,此时编辑器会进行(Named return Value优化)NRV优化,不调用拷贝构造函数 ,如果是引用传递的方式返回当前函数体内生成的对象时,并不发生拷贝构造函数的调用
//{
//	A a;
//	return a;
//}


int main()
{
	A a1,a3,a4;
	A a2 = a1;  //调用拷贝构造函数,对应情况1
	useClassA(a1);//调用拷贝构造函数,对应情况2
	a3 = getClassA();//发生NRV优化,但是值返回,依然会有拷贝构造函数的调用 情况3
	a4 = getClassA2(a1);//发生NRV优化,且引用返回自身,不会调用
    return 0;
}

参考资料来源:

阿秀

标签:返回,调用,40,发生,下会,拷贝,构造函数
From: https://www.cnblogs.com/codemagiciant/p/17524186.html

相关文章

  • 34.C++有哪几种的构造函数
    34.C++有哪几种的构造函数C++中的构造函数可以分为4类:默认构造函数:在没有显式定义构造函数时,C++会自动生成一个默认构造函数,该函数没有参数,不执行任何操作。初始化构造函数(有参数)拷贝构造函数:当使用现有对象初始化新对象时,拷贝构造函数被调用。它的语法是在函数声明时使用一......
  • 40. 关键路径
    一、什么是关键路径  在带权有向图中,以顶点表示事件,以有向边表示活动,以边上的权值表示完成该活动的开销(如完成活动所需的时间),称之为用边表示活动的网络,简称AOE网(ActivityOnEdgeNetWork).  AOE网具有以下两个性质:只有在某顶点所代表的事件发生后,从该顶点出发......
  • Cisco ISR 4000 Series IOS XE Release Dublin-17.11.1a ED
    CiscoISR4000SeriesIOSXEReleaseDublin-17.11.1aED思科4000系列集成服务路由器请访问原文链接:https://sysin.org/blog/cisco-isr-4000/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org思科4000系列集成服务路由器让您的分支机构站点为实施全数字化转型......
  • 《深入探索C++对象模型》- 第二章 - 构造函数语义学 - 笔记
    PDF版本https://www.aliyundrive.com/s/oQJJiJfQmU2......
  • 移植SDL到JZ2440显示BMP图片
    写这类教程的目的是,熟悉Linux基本操作和嵌入式开发流程,希望对你有所帮助. 前面我们讲过系统起来后开机LOGO的制作,韦老师第3期讲了如何显示jpeg图片,那么怎么显示bmp图片?这次我们借助libSDL来实现,我们先移植SDL到Ubuntu,体验它的威力后再移植到开发板。一、移植SDL到Ubun......
  • MIT6.5840 lab2,3 记录
    参考链接课程地址如何Debug:没有它可怎么活,几万行的日志怎么看Students'GuidetoRaftraft算法可视化:直观展示raft可视化简单入门raft讲解视频:强烈推荐感想感觉理论+实践来学一个东西才学的深刻,特别是对于我这样对抽象理解不太行的,每次见识了一个算法或系统真正如何运行......
  • 动态路由-刷新页面时的 短暂404 bug修复
    动态路由-刷新页面时的bug修复1.问题说明如果我们手动刷新浏览器网页,会发现跳到了404页面对于addRoute添加的路由,在刷新时会白屏 2.问题分析解决页面刷新时,页面404问题在静态路由后面有一个路由通配符,addRoutes添加的路由是异步添加的。路由设置中的404页处在中间位置,而......
  • Centos文件压缩与打包43.240.72
    在linux下最常见的压缩文件通常都是以.tar.gz为结尾的,除此之外还有.tar.gz .bz2 .zip等等·gz gzip压缩工具压缩的文件43.240.73·bz2bzip2压缩工具压缩的文件43.240.74·tar tar打包程序打包的文件(tar并没有压缩功能,只是把一个目录合并成一个文件)·tar.gz 可以理......
  • 2024备考408Week16
    一、本周总结:使用时间:(离每周目标40h还差10h,差距还很大!)总计30h,数学12h50min,专业课12h9min,英语3h40min,政治1h21min。二、存在问题:1.数学、专业课(DS+OS+CO+CN)做题训练不够,思考不够深入,计算不够熟练和准确,后期一定要开始加强了;2.碎片化时间和整块时间没有合理安排,碎片化时间应该安排......
  • Windows兼容模式怎么设置?140.210.18.x
    服务器兼容是什么意思?服务器兼容性怎么改?兼容性(compatibility)是指硬件之间、软件之间或是软硬件组合系统之间的相互协调工作的程度。兼容的概念比较广,相对于硬件来说,几种不同的电脑部件,如CPU、主板、显示卡等,如果在工作时能够相互配合、稳定地工作,就说它们之间的兼容性比较好,反之就......