据此:运算符重载,
class X {
X& operator++()
{
// do actual increment
return *this;
}
X operator++(int)
{
X tmp(*this);
operator++();
return tmp;
}
};
是实现++
运算符的方式。第二个(后缀运算符)按值而不是按引用返回。这很清楚,因为我们不能返回对本地对象的引用。因此tmp
,我们不是在堆栈上创建对象,而是在堆上创建它并返回对它的引用。所以我们可以避免额外的副本。所以我的问题是,以下是否有任何问题:
class X {
X& operator++()
{
// do actual increment
return *this;
}
X& operator++(int)
{
X* tmp = new X(*this);
operator++();
return *tmp;
}
};