博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++之匿名对象与析构函数的关系
阅读量:6573 次
发布时间:2019-06-24

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

#include 
using namespace std; class Location{public: Location(int xx = 0, int yy = 0){ X = xx; Y = yy; cout << "Constructor Object.\n"; } Location(const Location& obj){
//copy构造函数 X = obj.X; Y = obj.Y; } ~Location(){ cout << X << "," << Y <<" "<< "Object destroyed." << endl; } int GetX(){ return X; } int GetY(){ return Y; }private: int X; int Y;}; //g()返回一个元素//结论1:函数的返回值是一个元素(复杂类型),返回的是一个新的匿名对象(所以会调用匿名对象类的copy构造函数)////结论2:匿名对象的去和留//如果用匿名对象初始化 另外一个同类型的对象,匿名对象转成有名对象//如果用匿名对象赋值给 另外一个同类型的对象,匿名对象被析构Location g(){ Location A(1, 2); return A;//A是一个局部变量,当生命周期完毕,会调用析构函数释放空间。此时新建了一个匿名对象来接返回值,因此会调用匿名对象类的复制构造函数,相当于A来初始化匿名对象} void playobj01(){ cout << "playobj01执行开始\n" << endl; g();//匿名对象会被析构掉; printf("匿名对象会析构掉\n"); cout << "playobj01执行完毕\n" << endl;} void playobj02(){ cout << "playobj02执行开始\n" << endl; //用匿名对象初始化m 此时c++编译器 直接把匿名对象转成了m Location m = g(); printf("匿名对象被转正,不会析构掉\n");//速度就会加快 cout << m.GetX() << endl; cout << "playobj02执行完毕\n" << endl;} void playobj03(){ cout << "playobj03执行开始\n" << endl; Location m2(1, 2); m2 = g(); printf("因此用匿名对象赋值给m2,匿名对象被析构掉\n"); cout << m2.GetX() << endl; cout << "playobj03执行完毕\n" << endl;} int main(){ playobj01(); playobj02(); playobj03(); system("pause"); return 0;}

 

转载于:https://www.cnblogs.com/fuao2000/p/11065594.html

你可能感兴趣的文章
Ubuntu16.04 ssh安及root登录
查看>>
算法导论Java实现-优先级队列(6.5章节)
查看>>
一个工程两个target
查看>>
linux 给文件夹权限
查看>>
用复制mysql/data 文件夹 下面的数据库的形式来复制数据库出现的问题
查看>>
求连续子数组的最大和
查看>>
C语言dos程序源代码分享(进制转换器)
查看>>
php项目中常用的log日志记录方法
查看>>
Android--实现点击一次返回键返回桌面而不是退出应用
查看>>
LogParser 导入MSSQL
查看>>
左侧固定导航栏
查看>>
linux安装go环境并编写第一个go程序
查看>>
解决:laravel出现Please provide a valid cache path.
查看>>
[JAVA] String常用方法
查看>>
oracle
查看>>
兼容IE浏览器样式的html上传文件控件
查看>>
直接插入排序
查看>>
ssh建立安全跳板机,方便外网登录内网机器
查看>>
fstab中mount错误导致不能启动
查看>>
OSPF转发地址深入解析
查看>>