读书笔记:Effective C++ 炒冷饭 - Item 28 避免函数返回对象内部成员的“把柄”

读书笔记:Effective C++ 炒冷饭 - Item 28 避免函数返回对象内部成员的“把柄”
[原创文章欢迎转载,但请保留作者信息]
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..

可是,这个军规似乎也太苛刻了些。总归有需要返回对象“把柄”的时候。如果用户自己犯糊涂,我拦也拦不住啊……

你可能感兴趣的:(读书笔记:Effective C++ 炒冷饭 - Item 28 避免函数返回对象内部成员的“把柄”)