*this
当对象实际上是临时对象时,是否可以创建以不同方式工作的方法?
例如:
#include <iostream>
struct BigObj{
void changeFast() {}
};
class A {
BigObj obj;
public:
A(){}
A(const A& a) {
obj = a.obj;
std::cout << "copy\n";
}
A(A&& a) {
obj = std::move(a.obj);
std::cout << "move\n";
}
A changed() {
A ret = *this; //(1)
ret.obj.changeFast();
return ret;
}
};
int main(){
A a;
A b = std::move(a).changed();
(void)b;
return 0;
}
在第 (1) 行中,我们有副本,但它并不是真正需要的。但是我们不能总是搬到这里,因为有时方法调用不是临时的。应该怎么做才能避免在这里复制?
如果它不是方法而只是函数,则可能会写入类似的函数:
A changed(const A& a){
}
A changed(A&& a){
}