條款一
原話:當你需要考慮 不指向任何對象 的可能性時,或是考慮 在不同時間指向不同對象 的能力時,你就應該採用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。
其實原本想劃幾個圖來表示,那就可以更加直觀了。可這個機子沒工具,以後再補拉。