必须返回对象时,别妄想返回其reference(Don’t try to return a reference when you must return an object.)
reference是对象的另一个名称,它指向一个实际存在的对象。
如果reference指向local 对象,则对象在函数返回前销毁。
如果reference指向new 对象,则函数返回的地方需要进行delete操作,给客户带来不便。
特别的:
const Point& operator * (const Point & lhs, const Point & rhs)
{
Point *p = new Point(lhs.GetX(), rhs.GetY());
return p;
}
Point w, x, y, z;
w = x * y * z;
因为有两次*,所以会new两次,但是只可以获得一个new的指针,另外一个new就被泄露掉了。
注意:
1、绝对不要反回pointer或reference指向一个local stack对象,或返回reference指向一个heap-allocated对象,或返回pointer或reference指向一个local static对象而有可能同时需要多个这样的对象。