条款一
原话:当你需要考虑 不指向任何对象 的可能性时,或是考虑 在不同时间指向不同对象 的能力时,你就应该采用pointer。前一种情况你可以将 pointer设置为null,后一种情况你可以改变pointer所指对象。而当你确定 总是会代表某个对象,而且 一旦代表了该对象就不再能够改变,那么你应该选择reference。

考虑四种情况:
1、pointer:声明object*
2、const_pointer:声明const objcect*
3、reference:声明object&
4、const_reference:声明const objcet&

pointer,可以指向object对象,也可以指向从object继承的对象,只要是前面的对象都可以指向。
const_point,可以指向固定对象,一但指向了某个对象,它就不能够指向其他对象了,当然对象里面的变化,它不关心。reference和const_reference也是同样的道理。

很多人会问,那么pointer和reference有什么区别呢?
或许看起来没有什么区别,你就这么想吧,pointer到对象,是指向对象。而reference就是对象。这时候又有人问那么reference和直接声明的对象又有什么区别呢?看看下面的用法:
C#的程序员可能有以下幻想
object&  ro = new objcet ;//VC7.1下声明int& iValue=5;静态编译出现Error。
object  o = new object;
但事实上用法应该是这样的,因为在C++里的只能把new的对象给指针,例如object* po=new object。
object  o;
object&  ro = o;//
这个时候,他们没有什么区别,只不过是名字不同而已,一个为o,另一个为ro,这时候那个对象有两个名字。

这时候可能又会想那么const_refencence又是怎么回事啊,那就是它所指代的对象不能变化(和const_pointer的区别),即对象状态为const。
其实原本想划几个图来表示,那就可以更加直观了。可这个机子没工具,以后再补拉。