<二>函数调用过程中对象优化
2023-02-18 16:33:45 时间
代码1
using namespace std;
class TestV2 {
public:
TestV2(int a = 10) : ma(a)
{
cout << "TestV2(int) " << ma <<" 对象地址="<<this << endl;
}
~TestV2()
{
cout << "~TestV2()" << ma <<"析构对象地址="<<this<<endl;
}
TestV2(const TestV2 & t) :ma(t.ma)
{
cout << "TestV2(const Test & t),拷贝构造地址 原对象地址"<<&t <<"目标对象地址="<<this << endl;
}
TestV2 & operator =(const TestV2 & t)
{
if (this == &t) { return *this; }
ma = t.ma;
cout << "operator=源对象地址="<< &t<< "目标对象地址=" <<this << endl;
return *this;
}
int getData()
{
return ma;
}
private: int ma;
};
TestV2 getObject(TestV2 tep)
{
int data = tep.getData();
TestV2 temp(data + 100);
return temp;
}
int main()
{
TestV2 t1(20);
TestV2 t2=getObject(t1);
cout << "t2对象地址= "<< &t2 << endl; //对象2的地址带入getObject()函数,TestV2 temp(data + 100) 直接在t3上构建对象
system("pause");
return 0;
}
// 针对上面优化
//1:函数参数传递过程汇总,对象优先按引用传递,不要按值传递(可以解决 形参的拷贝构造,和形参的析构)
//2:
TestV2 getObject(TestV2 &tep)
{
int data = tep.getData();
TestV2 temp(data + 100);
return temp;
}
改为
TestV2 getObject(TestV2 &tep)
{
return TestV2 temp(tep.getData()+ 100
);
//用一个临时对象拷贝构造一个新的对象的时候,这个临时对象会被编译器优化掉,不再产生
3:接受函数返回是对象的时候,优先用初始化的方式接受,不要用赋值的方式接受
相关文章
- 微信公众号支付提示mch_id参数格式错误
- C#常见金额优选类型及其三种常用的取整方式
- .NET微信网页开发之通过UnionID机制,解决用户在不同公众号,或在公众号、移动应用之间帐号统一问题
- Mui Webview下来刷新上拉加载实现
- Select下拉框使用ajax异步绑定数据
- .NET、C#基础知识
- 记一个数据库游标的实例
- .NET 使用OLEDB导入Excel数据
- 通用分页存储过程,干货无污染
- .NET如何引用System.Drawing.Drawing2D 命名空间和System.Drawing.Image及其相关概念
- .Net ADO拼接带参数的SQL语句
- 提高数据库的查询速率及其sql语句的优化问题
- 学无止境,坚持无价!
- 首款通过! 机器学习服务活体检测算法荣获CFCA权威安全认证
- Web应用怎样获取Access Token?
- HMS Core 3D流体仿真技术,打造移动端PC级流体动效
- 如何优化大场景实时渲染?HMS Core 3D Engine这么做
- 【FAQ】申请Health Kit权限的常见问题及解答
- 数据价值深度挖掘,分析服务上线“探索”能力
- 【FAQ】在华为鸿蒙车机上集成华为帐号的常见问题总结