C++算符重载和系统资源问题

来源:百度知道 编辑:UC知道 时间:2024/06/03 18:18:46
class MyData{
//....
MyData operator+(const MyData& another){
Mydata dr;
//....
return dr;
}
}
Mydata d1,d2,d3;
d3 = d1+d2;//d1+d2时生成临时变量dr,返回时赋值给d3
这样的话在使用这个+运算符的时候就会先构建局部变量dr,返回给对象时会进行复制数据的操作,有什么办法可以避免复制这步浪费资源的操作?(用函数方法传引用除外)
我基础不好,可能问题并不像我描述的这样,嗨
就是说在执行+运算的时候有个中间变量要生成,如果对象包含的数据量比较大,那么这个过程就白消耗了复制这步的资源,本来可以通过直接传递d3的引用进去,而不必使用拷贝构造函数了
引用方式的函数定义: void Add(MyData& res/*实参方式,保存此对象和other的运算结果*/,const MyData& other){...}
这样可以避免复制操作了,重载操作符的话怎么做呢?
flyyyyyyyyyyy:喔,这样的啊,好晕,怪自己没好好理解C++哎.谢谢回复

就像楼上说的那样,想用重载运算符,就是要靠返回值,如果你不想定义局部变量就直接把表达式的值直接返回,例如:
class MyData{
//....
MyData operator+(const MyData& another){
Mydata dr;
dr = this.data + another.data;
return dr;
}
}
改写为:
class MyData{
//....
MyData operator+(const MyData& another){
return(this.data + another.data);

}
}

你说临时变量在哪里了?
你不会以为要求一个表达式的值先创建一个临时变量来存储吧?
如果是这么想也不奇怪,毕竟只能返回一个值,那么是什么存储的这个值呢?其实存储这个值的并不是内存中的变量,而是寄存器变量,这样就不会耗内存,而且访问寄存器变量很快。

直接把计算的式子写到return后面去。你完整的程序没给,反正大概的意思就是这样。