博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ 匿名对象产生场景
阅读量:6001 次
发布时间:2019-06-20

本文共 1412 字,大约阅读时间需要 4 分钟。

//匿名对象产生的三种场景#include
using namespace std;class Point{public: Point(int a,int b){ cout << "有参构造函数被调用了1" << endl; this->x = a; this->y = b; } Point(Point &a1){ cout << "拷贝构造函数被调用了2" << endl; this->x = a1.x; this->y = a1.y; } ~Point(){ cout << "析构函数被调用了3" << endl; cout << "x=" << x << endl; cout << "y=" << y << endl; } Point Protset(int a){ this->x = a; return *this; //执行 return *this; 会产生一个匿名对象,作为返回值 //强调:如果返回值是引用,则不会产生匿名对象 } Point Protset2(int a){ Point temp(a, a); return temp; //执行 return temp;会先产生一个匿名对象,执行拷贝构造函数,作为返回值, //然后释放临时对象temp } //总结:函数返回值为一个对象(非引用)的时候会产生一个匿名对象,匿名对象根据主函数的操作决定生命周期 Point& Protset3(int a){ Point temp(a, a); return temp; //执行 return temp;不会产生匿名对象,而是会将temp的地址先赋值到引用中, //在释放temp的内存,此时Point&得到是一个脏数据 } void PrintfA()const{ cout << "x="<
<< endl; cout << "y=" << y << endl; }private: int x; int y;};void ProtectA(){ //生成一个匿名对象,因为用来初始化另一个同类型的对象,这个匿名对象会直接转换成新的对象, //减少资源消耗 Point p1 = Point(1,1); /*Point p2(2, 2); p2 = p1.Protset(3); p2.PrintfA();*/ //观察发现p2打印出正确数据,因此得出结论p1.Protset(3);返回来一个匿名对象, //但是这个匿名对象执行完"="之后,才会被释放 Point p4(5, 5); p4=p1.Protset2(4); p4.PrintfA();}void main(){ ProtectA(); system("pause");}

 

转载地址:http://nzdmx.baihongyu.com/

你可能感兴趣的文章
【进阶2-3期】JavaScript深入之闭包面试题解
查看>>
【Chrome扩展开发】定制HTTP请求响应头域
查看>>
利用 CocoaPod 和 Git 管理组件中的一些细节梳理
查看>>
聊聊storm trident spout的_maxTransactionActive
查看>>
面向Vue新人:写一个简单的倒计时按钮
查看>>
区块链初体验
查看>>
关于手势处理
查看>>
super
查看>>
5G美洲白皮书:5G开源的现状(pdf)
查看>>
世界移动通信大会
查看>>
基于Spring Security Role过滤Jackson JSON输出内容
查看>>
从设计者的角度看 React
查看>>
js常见问题
查看>>
CentOS6系统编译部署LAMP(Linux, Apache, MySQL, PHP)环境
查看>>
71. Simplify Path
查看>>
海量大数据大屏分析展示一步到位:DataWorks数据服务对接DataV最佳实践
查看>>
PAT A1043
查看>>
JavaScript之手写Promise
查看>>
PHP_SELF变量解析和重复路径解决
查看>>
git 命令行使用(基础篇)
查看>>