これによると:演算子のオーバーロード、
class X {
X& operator++()
{
// do actual increment
return *this;
}
X operator++(int)
{
X tmp(*this);
operator++();
return tmp;
}
};
++
演算子を実装する方法です。2 つ目 (後置演算子) は、参照ではなく値で戻ります。ローカル オブジェクトへの参照を返すことができないため、これは明らかです。したがって、tmp
オブジェクトをスタック上に作成する代わりに、ヒープ上に作成し、それへの参照を返します。したがって、余分なコピーを避けることができます。だから私の質問は、次のことに問題はありますか?
class X {
X& operator++()
{
// do actual increment
return *this;
}
X& operator++(int)
{
X* tmp = new X(*this);
operator++();
return *tmp;
}
};