{
Point ulhc ;
Point lrhc ;
};
class Rectangle
{
public:
...
Point& upperLeft() const { return pData->ulhc; } 1//const只对函数内进行保护,函数返回后呢??
Point& lowerRight() const { return pData->lrhc; } 2 //const只对函数内进行保护,函数返回后呢??
private:
std::tr1::shared_ptr<RectData> pData;
...
};
1,2两函数都返回引用,指向private内部数据,调用者于是可通过这些引用更改内部数据!这严重破坏了数据的封装
性,对私有成员进行直接操作?太不可思意了!
const Point& upperLeft() const { return pData->ulhc; } 3
const Point& lowerRight() const { return pData->lrhc; } 4
或者将1,2改为3,4,这就限制了客户的“涂改权”,只有“读取权”。
但终究“返回一个handle代表对象内部成分”总是危险的。特别是将返回的指针或引用赋值给其它指针或引用,那么
久造成了“悬空”。
请记住:
· 避免返回handles(包括reference、指针、迭代器)指向对象内部。遵守这个条款可增加封装性,帮助const成员函
数的行为像个const,并将发生“虚吊号码牌”(dangling handles)的可能性降至最低。