オブジェクト*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) には copy がありますが、実際には必要ありません。ただし、一時的ではないメソッドが呼び出されることがあるため、常にここに移動できるとは限りません。ここでコピーを避けるために何をすべきですか?
メソッドではなく関数だけの場合は、同様の関数に書き込むことができます。
A changed(const A& a){
}
A changed(A&& a){
}