必须返回对象时,别妄想返回其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对象而有可能同时需要多个这样的对象。
本文探讨了在编程中返回对象引用的潜在问题,特别是当这些引用指向局部对象或堆分配的对象时可能导致的问题,如内存泄漏等,并给出了具体的代码示例。
1540

被折叠的 条评论
为什么被折叠?



