Note of Justin

关于工作和读书的笔记

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  47 Posts :: 0 Stories :: 45 Comments :: 0 Trackbacks

留言簿(14)

搜索

  •  

积分与排名

  • 积分 - 51888
  • 排名 - 433

最新评论

阅读排行榜

评论排行榜

[原创文章欢迎转载,但请保留作者信息]
Justin 于 2009-12-15


这里的“把柄”原文为handle,实在不知道怎么翻译,文中指的是:引用(reference)、指针(pointer)和迭代器(iterator)。
而所谓的对象内部成员,则包括了数据成员以及保护/私有函数。
因此第28条军规的要求就是:不要在函数中返回对象内部的(私有)数据成员或者是保护/私有函数的引用、指针或是迭代器。【应该也不一定吧?】

如果只需要读访问,就使用const的返回值,不要开放写的权限。

有可能产生悬垂指针(dangling pointer)也是暴露对象内部成员“把柄”的后果之一。书中给出一个例子说明了这个问题:一个返回对象内部成员的函数,在用户不正确使用的情况下,就有可能产生悬垂指针。
class AClass{//..};
class BClass{
//..
const AClass& FuncReturningARef();
//..
}

//a possible user's code
BClass AnObjectOfB;
const AClass *pAClass = &(AnObjectOfB.FunReturningARef());
//After the call pAClass becomes a dangeling pointer..

可是,这个军规似乎也太苛刻了些。总归有需要返回对象“把柄”的时候。如果用户自己犯糊涂,我拦也拦不住啊……
posted on 2010-01-25 09:00 Justin.H 阅读(385) 评论(1)  编辑 收藏 引用 所属分类: Effective C++ 炒冷饭

Feedback

# re: 读书笔记:Effective C++ 炒冷饭 - Item 28 避免函数返回对象内部成员的“把柄” 2010-01-25 18:56 陈梓瀚(vczh)
其实不会的苛刻的,如果你真的完全封装了细节……  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理