首页 > 其他分享 ><二>函数调用过程中对象优化

<二>函数调用过程中对象优化

时间:2022-12-01 12:22:38浏览次数:38  
标签:temp 对象 函数调用 int TestV2 tep 优化

代码1

#include <iostream>
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(20);
	t2=getObject(t1);
	cout << "t2对象地址= "<< &t2 << endl;
	system("pause");
	return 0;

}

看上面代码执行效果

代码2

#include <iostream>
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(20);	
	TestV2 t3=getObject(t2);
	cout << "t3对象地址= "<< &t3 << endl;//对象3的地址带入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:接受函数返回是对象的时候,优先用初始化的方式接受,不要用赋值的方式接受

标签:temp,对象,函数调用,int,TestV2,tep,优化
From: https://www.cnblogs.com/erichome/p/16939131.html

相关文章

  • JavaScript笔记之面向对象
    面向对象了解构造函数原型对象的语法特征,掌握JavaScript中面向对象编程的实现方式,基于面向对象编程思想实现DOM操作的封装。了解面向对象编程的一般特征掌握基于......
  • delphi 让TActionList中的sender指向事发对象
    故事这样的:我有一批按钮需要共同一个点击事件,本来是按最普通的方法,批选了这些按钮,然后双击click事件,然后写代码,最主要的是这句:iTag:=TControl(Sender).Tag;......
  • iOS SIGKILL 信号量崩溃抓取以及优化实践
    一、什么是SIGKILL崩溃很多时候,当我们在崩溃日志中看到SIGKILL关键信息的时候,这就表示操作系统从上层杀死了我们的进程,也就是我们常说的kill-9命令。ExceptionType:......
  • 教材推荐 | 最优化:建模、算法与理论 (文再文等)
    最优化计算方法是运筹学、计算数学、机器学习和数据科学与大数据技术等专业的一门核心课程。北京大学文再文等老师最近出版的最优化:建模、算法与理论一书推荐作为本课程的参......
  • m基于PSO粒子群优化的可靠性和费用优化问题求解MATLAB仿真
    1.算法概述PSO是粒子群优化算法(——ParticleSwarmOptimization)的英文缩写,是一种基于种群的随机优化技术,由Eberhart和Kennedy于1995年提出。粒子群算法模仿昆虫、兽群、......
  • 优化if-else代码的八种方案
    前言代码中如果if-else比较多,阅读起来比较困难,维护起来也比较困难,很容易出bug,接下来,本文将介绍优化if-else代码的八种方案。优化方案一:提前return,去除不必要的else如果if-el......
  • m基于PSO粒子群优化的可靠性和费用优化问题求解MATLAB仿真
    1.算法概述     PSO是粒子群优化算法(——ParticleSwarmOptimization)的英文缩写,是一种基于种群的随机优化技术,由Eberhart和Kennedy于1995年提出。粒子群算法模仿昆......
  • 矩阵快速幂优化DP
    一篇比较初步的方法总结。矩阵快速幂优化递推最经典的应用是快速求斐波那契数列的某一项,由于过于简单在这里没有什么必要提。由此引申出一类和上面一样单纯地优化递推过程......
  • js 对象属性过滤方法
    有时候需要剔除少数属性,留下大多数。类似于TS的omit例子:letperson={name:"jackchen",age:54,address:'hongkong'}let{name,...xiaohong}=personcons......
  • JavaScript中的Error错误对象与自定义错误类型
    ErrorError是JavaScript语言中的一个标准的内置对象,专门用于处理JS开发中的运行时错误。当我们的JS代码在运行过程中发生错误的话,就会抛出Error对象,整个程序将会中断在错......